微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 SQL Server 中使用单个 case 语句选择多列

如何解决在 SQL Server 中使用单个 case 语句选择多列

我要求三列的值取决于单列的值。假设我有一张桌子

A | B | C | D | E

A、B、C、D 和 E 是列,如果 D 列的值为“1”,则要求获取 A、B 和 C 的值,否则 A、B 和 C 的值将是空。

我尝试使用 CASE 语句,但似乎我们必须多次使用 CASE

SELECT 
    CASE 
        WHEN D = '1' 
            THEN A 
            ELSE NULL,CASE 
        WHEN D = '1' 
            THEN B 
            ELSE NULL;

我一直在寻找类似于一个 CASE 的东西并选择适当的值。有什么方法可以实现,或者这是推荐的方法

解决方法

三个case表达式是最自然的方法。但是,您也可以使用 outer apply:

SELECT x.*
FROM t OUTER APPLY
     (SELECT t.a,t.b,t.c
      WHERE d = '1'
     ) x;
,

如果您的表具有唯一标识符,例如 ID,您还可以将表加入到自身中。假设您的表名是 test

SELECT      test2.A,test2.B,test2.C,test.D,test.E
FROM        test
LEFT JOIN   test test2 ON
                test.ID = test2.ID AND
                test.D = '1';

如果在列 ID 加上 D 上设置 UNIQUE 复合索引,它可以是一个有效的查询。 在上述查询中,您需要 test.Dtest.E 来保留这些列中的原始值,而不管 D 的值如何。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。