gpt4 book ai didi

sql - 如何在 Transact/SQL 中创建数据透视表?

转载 作者:行者123 更新时间:2023-12-04 13:07:19 25 4
gpt4 key购买 nike

我的源数据表是

MemID Condition_ID Condtion_Result
----------------------------------
1 C1 0
1 C2 0
1 C3 0
1 C4 1
2 C1 0
2 C2 0
2 C3 0
2 C4 0

我想要创建的预期 View 是......
MemID C1 C2 C3 C4
------------------
1 1 0 0 1
2 0 0 0 1

这是另一个条件。
在上面的源表示例中,给定的 MemID 只有 4 行。这个数字会因实际情况而异。我的数据透视表(或任何其他解决方案)应该选择任意数量的条件结果并将它们显示为列。
怎么做 ?

最佳答案

您需要使用 PIVOT .您可以使用 STATIC PIVOT(其中您知道要转换的列的值)或 DYNAMIC PIVOT(其中列在执行时间之前是未知的)。

静态枢轴 (见 SQL Fiddle with Demo):

select *
from
(
select memid, Condition_id, Condition_Result
from t
) x
pivot
(
sum(condition_result)
for condition_id in ([C1], [C2], [C3], [C4])
) p

动态枢轴 (见 SQL Fiddle with Demo):
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.condition_id)
FROM t c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')


set @query = 'SELECT memid, ' + @cols + ' from
(
select MemId, Condition_id, condition_result
from t
) x
pivot
(
sum(condition_result)
for condition_id in (' + @cols + ')
) p '


execute(@query)

两者都会产生相同的结果。

关于sql - 如何在 Transact/SQL 中创建数据透视表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11617713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com