简体   繁体   English

SQL case语句-多个条件

[英]SQL case statement - Multiple conditions

I am writing a case statement where I need to check columns and assign a value . 我正在写一个案例声明,需要检查列并分配值。 But what if a row qualifies for multiple cases ? 但是,如果一行符合多种情况该怎么办? For example in following table I want assign a bucket when COLA and/or COLB is null ; 例如在下表中,我想在COLA和/或COLB为null时分配一个存储桶; so in first case both are NULL , so how will I tell SQL case statement to assign "Both are NULL " when COLA and COLB are null. 因此,在第一种情况下,两者均为NULL,因此当COLA和COLB为null时,如何告诉SQL case语句分配“ Both are NULL”。 I can easily assign when COLA or COLB is null . 当COLA或COLB为null时,我可以轻松分配。 At my work I am checking 8 columns , so I need to find every combination and right case for that ? 在我的工作中,我正在检查8列,因此我需要找到每种组合的正确用例吗? There has to be an easy way . 必须有一种简单的方法。

**RowNumber     COLA                  COLB                Case**
1                   Null                  Null               **Both are NULL** 
2                   Null                  B                        A is null
3                   A                 Null                 B is null 
4                   AA                BB                   NULL
5                   CC                Null                 B is null 

Given you have 8 columns, you probably need to do something like this: 假设您有8列,则可能需要执行以下操作:

WITH t AS (
    SELECT
        CASE WHEN (colA IS NULL AND colB IS NULL AND colC IS NULL AND colD IS NULL AND 
                   colE IS NULL AND colF IS NULL AND colG IS NULL AND colH IS NULL) THEN 'ALL' ELSE '' END [ALL],
        CASE WHEN colA IS NULL THEN 'A' ELSE '' END [A],
        CASE WHEN colB IS NULL THEN 'B' ELSE '' END [B],
        CASE WHEN colC IS NULL THEN 'C' ELSE '' END [C],
        CASE WHEN colD IS NULL THEN 'D' ELSE '' END [D],
        CASE WHEN colE IS NULL THEN 'E' ELSE '' END [E],
        CASE WHEN colF IS NULL THEN 'F' ELSE '' END [F],
        CASE WHEN colG IS NULL THEN 'G' ELSE '' END [G],
        CASE WHEN colH IS NULL THEN 'H' ELSE '' END [H] 
        FROM
            <TABLENAME>)                                

SELECT 
    CASE WHEN [ALL] = 'ALL' THEN 'ALL are NULL'
    ELSE [ALL] + ',' + A + ',' + B + ',' + C + ',' + D + ',' 
               + E + ',' + F + ',' + G + ',' + H + ' are NULL' 
END
FROM T

In the final select statement, you could make further alterations to present the results as you want. 在最后的select语句中,您可以进行进一步更改以根据需要显示结果。

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

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