【问题标题】:Select multiple columns with single case statement in SQL Server在 SQL Server 中使用单个 case 语句选择多个列
【发布时间】:2021-10-05 09:14:29
【问题描述】:

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

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 表达式; SQL Server 不支持SwitchCase 语句)
  • 多个 case 表达式没有错。
  • 您可以删除ELSE NULL,因为这是默认设置
  • 感谢@Larnu 的回复。我会考虑到这一点

标签: sql sql-server tsql select case


【解决方案1】:

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

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

【讨论】:

  • 谢谢@GordonLinoff,我一定会试试的。
【解决方案2】:

如果您的表具有唯一标识符,例如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 上设置唯一复合索引,它可以是一个有效的查询。 在上述查询中,您需要test.Dtest.E 来保留这些列的原始值,而不管D 的值如何。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 2017-02-17
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多