首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多条件嵌套Case语句

问多条件嵌套Case语句
EN

Stack Overflow用户
提问于 2017-11-15 08:55:34
回答 3查看 1K关注 0票数 0

我有一个像下面的图像一样的数据集。我需要在数据集中

等级红色在OpenSegment=yes中,如果不是但是等级琥珀存在,那么在OpenSegment=yes中,如果没有,则在OpenSegment=yes中。

为此我写

代码语言:javascript
复制
 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
                ) 

但不起作用。

​

​

放置ELSE NULL后的结果

​

​

EN

回答 3

Stack Overflow用户

发布于 2017-11-15 09:02:48

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

代码语言:javascript
复制
SELECT
    CASE WHEN airag.FK_MasterRAGRatingID IN (1, 2, 4) THEN 'yes' END AS OpenSegment
    -- other columns
FROM yourTable

无论您向我们展示的表是否导出,上述逻辑都应该工作。

ELSE表达式的默认CASE条件是NULL。因此,上述不匹配行的打开段将标记为NULL。如果要使用不同的值,则提供显式ELSE

代码语言:javascript
复制
CASE WHEN airag.FK_MasterRAGRatingID IN (1, 2, 4) THEN 'yes' ELSE '' END

这将假设您希望使用空字符串,但它可能是任何值。

票数 4
EN

Stack Overflow用户

发布于 2017-11-15 09:11:04

的回答很好,但是看看这个问题,你不应该在年级专栏而不是ID上做这个案例吗?

所以代码应该是;

代码语言:javascript
复制
SELECT
    CASE WHEN airag.Grade IN ('Red', 'Amber', 'Blue') THEN 'yes' END AS OpenSegment
    -- other columns
FROM yourTable
票数 1
EN

Stack Overflow用户

发布于 2017-11-15 08:57:47

尝试一下,COALESCE用于第一个Not NULL值,如果在column部分中给出EMPTY(''),它会考虑列有一些值。

因此,您必须使用NULL而不是“”。

代码语言:javascript
复制
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
                )

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

代码语言:javascript
复制
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
                ),'')

希望这是你所需要的:

代码语言:javascript
复制
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
,'')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47303067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档