【问题标题】:Pass multiple value in where clause in SQL Server在 SQL Server 的 where 子句中传递多个值
【发布时间】:2015-02-24 05:33:57
【问题描述】:
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 之间的所有值

【问题讨论】:

  • 你到底在问什么?
  • 是否有任何错误?
  • 请不要展示你是如何尝试的,也不要展示你想要实现的目标。添加一些具有预期输出的示例数据,这将有助于我们了解您想要什么。
  • 不,我的代码没有给我任何错误,但同时我也没有得到我想要的结果............实际上我想要当我选择 0-10 我的结果集应该是 0 到 10 岁之间的所有年龄......我现在说清楚了吗?

标签: sql sql-server case multiple-columns where-clause


【解决方案1】:

试试这个

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

【讨论】:

  • 感谢您的回复... bt 仍然存在一些问题..... TimeGran 是一个 i/p 变量....在您的代码中,如果我选择选项 0-10 它是给我21的结果..你能再检查一遍吗......
  • 感谢 NoDisplayName 先生 ........ 我添加了一些我的大脑(一点点),我得到了 o/p ........
【解决方案2】:

在我看来,您需要这样的东西:

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

这会将时间粒度与 - 分开并将其用作上限/下限。对于 else 部分,您可能需要某种 OR 子句,但无法编写它,因为我不知道在这种情况下您的可能值是什么。

【讨论】:

    猜你喜欢
    • 2015-09-04
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 2021-12-07
    • 1970-01-01
    相关资源
    最近更新 更多