1

列をチェックして値を割り当てる必要があるケースステートメントを書いています。しかし、行が複数のケースに該当する場合はどうなるでしょうか? たとえば、次の表では、COLA および/または COLB が null の場合にバケットを割り当てたいと考えています。したがって、最初のケースでは両方が NULL であるため、COLA と COLB が null の場合、SQL ケース ステートメントに「両方が NULL です」を割り当てるように指示するにはどうすればよいでしょうか。COLA または COLB が null の場合、簡単に割り当てることができます。私の仕事では 8 つの列をチェックしているので、すべての組み合わせとその適切なケースを見つける必要がありますか? 簡単な方法が必要です。

**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 
4

1 に答える 1

7

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

最後の select ステートメントでは、必要に応じて結果を表示するためにさらに変更を加えることができます。

于 2013-08-08T14:55:20.473 に答える