17,086
社区成员
发帖
与我相关
我的任务
分享
use Tempdb
go
if not object_id(N'Tempdb..#tab') is null
drop table #tab
Go
Create table #tab([colA] int,[colB] int)
Insert #tab
select 1,1 union all
select 1,2 union all
select 1,3 union all
select 2,1 union all
select 2,2 union all
select 2,3 union all
select 3,1 union all
select 3,2 union all
select 3,3 UNION ALL
SELECT 3,4
Go
SELECT * FROM #tab;
--测试数据结束
DECLARE @name VARCHAR(max),@sql VARCHAR(max)
SET @name =stuff((SELECT DISTINCT ',[Col'+convert(varchar,rn)+']' FROM
(Select *,ROW_NUMBER() OVER(PARTITION BY colA ORDER BY colB) AS rn from #tab)a
FOR XML PATH('')),1,1,'');
set @sql ='SELECT * from (Select *, ''Col'' +convert(varchar,ROW_NUMBER() OVER(PARTITION BY colA ORDER BY colB)) AS rn from #tab)a pivot(max(colB)for rn in('+@name+'))a'
EXEC( @sql)
colA colB
----------- -----------
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
3 4
(10 行受影响)
colA Col1 Col2 Col3 Col4
----------- ----------- ----------- ----------- -----------
1 1 2 3 NULL
2 1 2 3 NULL
3 1 2 3 4
(3 行受影响)