简体   繁体   English

在SQL Server的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 

if the age band is 0-10 the all values between 0 and 10 must be reflected 如果年龄段是0-10,则必须反映0到10之间的所有值

To me it looks like that you need something like this: 在我看来,您需要这样的东西:

WHERE 
  AGE >= convert(int, left(@timeGrain, charindex ('-', @timeGrain) - 1)) and
  AGE <= convert(int, substring(@timeGrain, charindex ('-', @timeGrain) + 1, 9999))

This will split the timegrain from - and use those as upper / lower limit. 这会将时间间隔从-分开,并将其用作上限/下限。 For the else part, you probably need to have some kind of OR -clause, but can't write it since I have no idea what your possible value is in that case. 对于其他部分,您可能需要具有OR子句,但由于我不知道在这种情况下可能的价值,因此无法编写。

Try this instead 试试这个

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' ) ) 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM