如何解决在 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.D
和 test.E
来保留这些列中的原始值,而不管 D
的值如何。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。