繁体   English   中英

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

[英]Select multiple columns with single case statement in SQL Server

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

A | B | C | D | E

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

我尝试使用 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';

如果在列IDD上设置 UNIQUE 复合索引,它可以是一个有效的查询。 在上面的查询中,无论D的值如何,您都需要test.Dtest.E来保留这些列中的原始值。

暂无
暂无

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

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