在 SQL 服务器中的 where 子句中传递多个值
Pass multiple value in where clause in SQL Server
SELECT
"dbo"."ClaimDataFormat"."AGE",
"dbo"."ClaimDataFormat"."RELATION",
"dbo"."ClaimDataFormat"."NAME",
"dbo"."ClaimDataFormat"."ENTRY_DATE",
"dbo"."ClaimDataFormat"."CLAIM_AMT",
CASE
WHEN "dbo"."ClaimDataFormat"."Gender" = 'F'
THEN 'FEMALE'
ELSE 'MALE'
END AS GENDER,
"dbo"."ClaimDataFormat"."STATUS",
"dbo"."ClaimDataFormat"."APPROVED_AMT"
FROM
"dbo"."ClaimDataFormat"
WHERE "dbo"."ClaimDataFormat"."AGE" = CASE
WHEN ${TimeGran} = '0-10'
THEN 0
WHEN ${TimeGran} = '0-10'
THEN 1
WHEN ${TimeGran} = '0-10'
THEN 2
WHEN ${TimeGran} = '0-10'
THEN 3
WHEN ${TimeGran} = '0-10'
THEN 4
WHEN ${TimeGran} = '0-10'
THEN 5
WHEN ${TimeGran} = '0-10'
THEN 6
WHEN ${TimeGran} = '0-10'
THEN 7
WHEN ${TimeGran} = '0-10'
THEN 8
WHEN ${TimeGran} = '0-10'
THEN 9
WHEN ${TimeGran} = '0-10'
THEN 10
WHEN ${TimeGran} = '11-20'
THEN 11
WHEN ${TimeGran} = '11-20'
THEN 12
WHEN ${TimeGran} = '11-20'
THEN 13
WHEN ${TimeGran} = '11-20'
THEN 14
WHEN ${TimeGran} = '11-20'
THEN 15
WHEN ${TimeGran} = '11-20'
THEN 16
WHEN ${TimeGran} = '11-20'
THEN 17
WHEN ${TimeGran} = '11-20'
THEN 18
WHEN ${TimeGran} = '11-20'
THEN 19
WHEN ${TimeGran} = '11-20'
THEN 20
ELSE 21
END
如果年龄段是 0-10 岁,则必须反映 0 到 10 之间的所有值
在我看来,您需要这样的东西:
WHERE
AGE >= convert(int, left(@timeGrain, charindex ('-', @timeGrain) - 1)) and
AGE <= convert(int, substring(@timeGrain, charindex ('-', @timeGrain) + 1, 9999))
这会将时间粒度从 - 中拆分出来,并将其用作上限/下限。对于 else 部分,您可能需要某种 OR -clause,但不能写它,因为我不知道在这种情况下您可能的价值是什么。
试试这个
SELECT dbo.ClaimDataFormat.AGE,
dbo.ClaimDataFormat.RELATION,
dbo.ClaimDataFormat.NAME,
dbo.ClaimDataFormat.ENTRY_DATE,
dbo.ClaimDataFormat.CLAIM_AMT,
CASE
WHEN dbo.ClaimDataFormat.Gender = 'F' THEN 'FEMALE'
ELSE 'MALE'
END AS GENDER,
dbo.ClaimDataFormat.STATUS,
dbo.ClaimDataFormat.APPROVED_AMT
FROM dbo.ClaimDataFormat
WHERE ( dbo.ClaimDataFormat.AGE BETWEEN 0 AND 10
AND TimeGran = '0-10' )
OR ( dbo.ClaimDataFormat.AGE BETWEEN 11 AND 20
AND TimeGran = '11-20' )
OR ( dbo.ClaimDataFormat.AGE = 21
AND TimeGran NOT IN ( '0-10', '11-20' ) )
SELECT
"dbo"."ClaimDataFormat"."AGE",
"dbo"."ClaimDataFormat"."RELATION",
"dbo"."ClaimDataFormat"."NAME",
"dbo"."ClaimDataFormat"."ENTRY_DATE",
"dbo"."ClaimDataFormat"."CLAIM_AMT",
CASE
WHEN "dbo"."ClaimDataFormat"."Gender" = 'F'
THEN 'FEMALE'
ELSE 'MALE'
END AS GENDER,
"dbo"."ClaimDataFormat"."STATUS",
"dbo"."ClaimDataFormat"."APPROVED_AMT"
FROM
"dbo"."ClaimDataFormat"
WHERE "dbo"."ClaimDataFormat"."AGE" = CASE
WHEN ${TimeGran} = '0-10'
THEN 0
WHEN ${TimeGran} = '0-10'
THEN 1
WHEN ${TimeGran} = '0-10'
THEN 2
WHEN ${TimeGran} = '0-10'
THEN 3
WHEN ${TimeGran} = '0-10'
THEN 4
WHEN ${TimeGran} = '0-10'
THEN 5
WHEN ${TimeGran} = '0-10'
THEN 6
WHEN ${TimeGran} = '0-10'
THEN 7
WHEN ${TimeGran} = '0-10'
THEN 8
WHEN ${TimeGran} = '0-10'
THEN 9
WHEN ${TimeGran} = '0-10'
THEN 10
WHEN ${TimeGran} = '11-20'
THEN 11
WHEN ${TimeGran} = '11-20'
THEN 12
WHEN ${TimeGran} = '11-20'
THEN 13
WHEN ${TimeGran} = '11-20'
THEN 14
WHEN ${TimeGran} = '11-20'
THEN 15
WHEN ${TimeGran} = '11-20'
THEN 16
WHEN ${TimeGran} = '11-20'
THEN 17
WHEN ${TimeGran} = '11-20'
THEN 18
WHEN ${TimeGran} = '11-20'
THEN 19
WHEN ${TimeGran} = '11-20'
THEN 20
ELSE 21
END
如果年龄段是 0-10 岁,则必须反映 0 到 10 之间的所有值
在我看来,您需要这样的东西:
WHERE
AGE >= convert(int, left(@timeGrain, charindex ('-', @timeGrain) - 1)) and
AGE <= convert(int, substring(@timeGrain, charindex ('-', @timeGrain) + 1, 9999))
这会将时间粒度从 - 中拆分出来,并将其用作上限/下限。对于 else 部分,您可能需要某种 OR -clause,但不能写它,因为我不知道在这种情况下您可能的价值是什么。
试试这个
SELECT dbo.ClaimDataFormat.AGE,
dbo.ClaimDataFormat.RELATION,
dbo.ClaimDataFormat.NAME,
dbo.ClaimDataFormat.ENTRY_DATE,
dbo.ClaimDataFormat.CLAIM_AMT,
CASE
WHEN dbo.ClaimDataFormat.Gender = 'F' THEN 'FEMALE'
ELSE 'MALE'
END AS GENDER,
dbo.ClaimDataFormat.STATUS,
dbo.ClaimDataFormat.APPROVED_AMT
FROM dbo.ClaimDataFormat
WHERE ( dbo.ClaimDataFormat.AGE BETWEEN 0 AND 10
AND TimeGran = '0-10' )
OR ( dbo.ClaimDataFormat.AGE BETWEEN 11 AND 20
AND TimeGran = '11-20' )
OR ( dbo.ClaimDataFormat.AGE = 21
AND TimeGran NOT IN ( '0-10', '11-20' ) )