多个条件的嵌套Case语句

时间:2017-11-15 08:55:35

标签: sql

我有一个像波纹管图像的数据集。 我需要在数据集中 如果没有,则会在OpenSegment=yes中出现红色等级 如果不是,则在OpenSegment=yes中存在等级琥珀色 然后在OpenSegment=yes

中出现等级蓝

为此我写了

 COALESCE(
                  CASE WHEN airag.FK_MasterRAGRatingID=1 THEN 'yes' ELSE '' END,
                  CASE WHEN airag.FK_MasterRAGRatingID=2 THEN 'yes' ELSE '' END,
                 CASE WHEN airag.FK_MasterRAGRatingID=4 THEN 'yes' ELSE '' END
                ) 

但没有工作。

enter image description here

放置ELSE NULL

后的结果

enter image description here

3 个答案:

答案 0 :(得分:3)

我甚至认为你在这里需要三个单独的CASE表达式:

SELECT
    CASE WHEN airag.FK_MasterRAGRatingID IN (1, 2, 4) THEN 'yes' END AS OpenSegment
    -- other columns
FROM yourTable

无论您向我们展示的表格是否派生,上述逻辑都应有效。

ELSE表达式的默认CASE条件为NULL。因此,上面会将非匹配行的开放段标记为NULL。如果要使用其他值,请提供明确的ELSE

CASE WHEN airag.FK_MasterRAGRatingID IN (1, 2, 4) THEN 'yes' ELSE '' END

这假设你想要使用空字符串,但它可以是任何值。

答案 1 :(得分:1)

Tim Biegeleisen给出了很好的答案,但是当你在Grade栏而不是ID上时,你不应该看到这个问题吗?

所以代码就是;

SELECT
    CASE WHEN airag.Grade IN ('Red', 'Amber', 'Blue') THEN 'yes' END AS OpenSegment
    -- other columns
FROM yourTable

答案 2 :(得分:0)

试试这个,COALESCE用于第一个Not NULL值,如果您在else部分中提供EMPTY(''),则认为该列有一些值。

所以你必须使用NULL而不是''。

COALESCE(
                  CASE WHEN airag.FK_MasterRAGRatingID=1 THEN 'yes' ELSE NULL END,
                  CASE WHEN airag.FK_MasterRAGRatingID=2 THEN 'yes' ELSE NULL END,
                 CASE WHEN airag.FK_MasterRAGRatingID=4 THEN 'yes' ELSE NULL END
                )

如果我们想在NULL列中使用Empty,我们必须使用如下所示:

ISNULL(COALESCE(
                  CASE WHEN airag.FK_MasterRAGRatingID=1 THEN 'yes' ELSE NULL END,
                  CASE WHEN airag.FK_MasterRAGRatingID=2 THEN 'yes' ELSE NULL END,
                 CASE WHEN airag.FK_MasterRAGRatingID=4 THEN 'yes' ELSE NULL END
                ),'')

希望这就是你所需要的:

SELECT ISNULL(CASE WHEN airag.FK_MasterRAGRatingID=1 THEN 'yes' 
        ELSE  
         CASE WHEN airag.FK_MasterRAGRatingID=2 THEN 'yes'
         ELSE
          CASE WHEN airag.FK_MasterRAGRatingID=4 THEN 'yes' ELSE NULL END END  END
,'')