gpt4 book ai didi

sql-server - 在sql server中将两列转换为5行

转载 作者:行者123 更新时间:2023-12-01 06:19:57 24 4
gpt4 key购买 nike

我有一个包含数据的临时表。

select * 
from #test

处理这个输出:

reg  | Years
---------------
6279 | 2016
6641 | 2016
8347 | 2016
6228 | 2015
8596 | 2015
7596 | 2015
6352 | 2015
1245 | 2014
5248 | 2014
6359 | 2014
6785 | 2014
9578 | 2013
4398 | 2013
2986 | 2013
7296 | 2013

但是上面的表格我需要分5行显示。这意味着将列转换为下面的行示例

years | reg1 | reg2 | reg3 | reg4
------+------+------+------+-----
2016 | 6279 | 6641 | 8347 | NULL
2015 | 6228 | 8596 | 7596 | 6352
2014 | 1245 | 5248 | 6359 | 6785
2013 | 9578 | 4398 | 2986 | 7296

我已根据一些建议尝试使用 pivot 和 unpivot,但我仍然没有得到。请帮助我。

最佳答案

下面是一个使用CROSS TAB技巧动态实现的

DECLARE @sql      VARCHAR(max)='',
@intr INT = 1,
@cnt INT

SELECT @cnt = (SELECT ( Max([Years]) - Min([Years]) ) + 1
FROM Yourtable)

SET @sql = 'select [Years], '

WHILE @intr <= @cnt
BEGIN
SET @sql += 'max(case when rn = '+ Cast(@intr AS VARCHAR(4)) + ' then [reg] end) as [reg'
+ Cast(@intr AS VARCHAR (100)) + '],'
SET @intr+=1
END

SET @sql = LEFT(@sql, Len(@sql) - 1)

SELECT @sql += 'from (select row_number()over(partition by [Years] order by [reg]) as rn,* from Yourtable) a group by [Years]'

--SELECT @sql

EXEC( @sql)

关于sql-server - 在sql server中将两列转换为5行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39994923/

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