我要编写一个大而杂乱的报告,该报告连接了 5 个表。一个表中的一列用于多个不同的值 - 本质上是一个“标签”列,其中根据用户想要使用的杂项元数据以创造性的方式使用标签。
结果,我对报告的查询返回了 3 个几乎相同的行,仅在“标记”列中有所不同;例如,我可能会得到:
NAME TAG EMAIL
BOB A BOB@EXAMPLE.COM
BOB B BOB@EXAMPLE.COM
BOB C BOB@EXAMPLE.COM
我想做的是将 TAG 列的内容拆分为 3 个单独的列从查询中返回,如下所示:
NAME A B C EMAIL
BOB A B C BOB@EXAMPLE.COM
因此我尝试使用 SQL SERVER CASE/WHEN 功能来执行此操作;我是说,例如,当 Tag 列的值为“A”时,将其返回到“A”列;如果是“B”,就放在“B”中;等。我以为这会返回上面的内容,但它给了我这个:
NAME A B C EMAIL
BOB A NULL NULL BOB@EXAMPLE.COM
BOB NULL B NULL BOB@EXAMPLE.COM
BOB NULL NULL C BOB@EXAMPLE.COM
这显然不太理想。
Stack Overflow 的天才们有什么想法吗?
最佳答案
您需要透视
数据。
;with Report (name, tag, email) as
(
select 'BOB', 'A', 'BOB@BOB.COM' union
select 'BOB', 'B', 'BOB@BOB.COM' union
select 'BOB', 'C', 'BOB@BOB.COM'
)
select * from Report
pivot
( min(tag) for tag in ([A], [B], [C]))
as pvt
运行上述查询的结果是这样的:
NAME EMAIL A B C
-----------------------------
BOB BOB@BOB.COM A B C
关于sql - 在 SQL Server SELECT 语句中使用 CASE 时消除 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3730095/