我怎么能团的(未知)的行数为单排,其中一组列确定分组?
例如,移
Ref Name Link
==============================
1 John L1
1 John L2
1 John L8
2 Steve L1
2 Steve L234
成
Ref Name ... ... ...
==========================================
1 John L1 L2 L8
2 Steve L1 L234 NULL
谢谢你的帮助
你可能会使用ROW_NUMBER()列名的源转动表:
select *
from
(
select ref,
name,
link,
row_number() over (partition by ref, name order by link) rn
from table1
) s
pivot (min (link) for rn in ([1], [2], [3], [4])) pvt
只是,如果你有更多的行延伸号码列表。
现场测试是@的Sql小提琴 。
如果不同的链接的数量是未知的,这需要动态地进行。 我觉得这是需要将工作:
DECLARE @SQL NVARCHAR(MAX) = ''
SELECT @SQL = @SQL + ',' + QUOTENAME(Rownumber)
FROM ( SELECT DISTINCT ROW_NUMBER() OVER(PARTITION BY Ref, Name ORDER BY Link) [RowNumber]
FROM yourTable
) d
SET @SQL = 'SELECT *
FROM ( SELECT Ref,
name,
Link,
ROW_NUMBER() OVER(PARTITION BY Ref, Name ORDER BY Link) [RowNumber]
FROM yourTable
) data
PIVOT
( MAX(Link)
FOR RowNumber IN (' + STUFF(@SQL, 1, 1, '') + ')
) pvt'
EXECUTE SP_EXECUTESQL @SQL
它是通常的旋转功能的轻微varation因为通常link
将是在列标题。 它基本上确定然后在需要的列数(即,对于每REF /名称链接的最大不同的值)枢转值到这些列。