gpt4 book ai didi

sql - 使用无限数量的不同值进行透视

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

我写了这个查询:

SELECT s, [1] AS a1, [2] AS a2, [3] AS a3, [4] AS a4
FROM (SELECT grade, aid, s FROM m) p
PIVOT
(
SUM(grade)
FOR aid IN ([1], [2], [3], [4])
) AS pvt ORDER BY pvt.s;

返回结果:

s  a1  a2  a3  a4
1 25 69 95 56
2 27 99 16 87
. . . .
99 98 12 34 76

这正是我想要的结果。我的问题是“援助”并不总是有四个不同的值(value)观。是否可以重写此查询(或使用存储过程),以便“a*”列的数量取决于“aid”中有多少个不同值?

最佳答案

您将需要使用动态数据透视来获取所需的列列表。这将首先检索列的列表,然后旋转该列表。与此类似的东西:

DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(aid)
FROM m
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')

set @query = 'SELECT s, ' + @cols + ' from
(
select grade, aid, s
from m
) x
pivot
(
sum(grade)
for aid in (' + @cols + ')
) p
ORDER BY p.s'

execute(@query)

关于sql - 使用无限数量的不同值进行透视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10803483/

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