で
おかげROW_NUMBERとの基本的なPIVOTは()あなたのために物事を行います。
SELECT [Developer],
[Designer],
[Coder]
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY Occupation ORDER BY (SELECT NULL)) RN
FROM #temp
) as t
PIVOT (
MAX(Name) FOR Occupation IN ([Developer],[Designer],[Coder])
) as pvt
出力:
Developer Designer Coder
A X Y
B NULL Z
をOccupation
Sの数が非常に、あなた可能性がある場合動的SQLが必要:
DECLARE @columns nvarchar(max),
@sql nvarchar(max)
SELECT @columns = (
SELECT DISTINCT ','+QUOTENAME(Occupation)
FROM #temp
FOR XML PATH('')
)
SELECT @sql = N'
SELECT '+STUFF(@columns,1,1,'')+'
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY Occupation ORDER BY (SELECT NULL)) RN
FROM #temp
) as t
PIVOT (
MAX(Name) FOR Occupation IN ('+STUFF(@columns,1,1,'')+')
) as pvt'
EXEC sp_executesql @sql
注:私はORDER BY (SELECT NULL)
を使用してランダムな順序を取得しました。この目的のためにいくつかの実際のフィールドを使います。
ZはBにバインドされており、デザイナーはいないが、YはXとAにバインドされていることをデータがどのように知っていますか? – Shnugo
私は、(演算文字列で区切られた)値を順序付けし、結果をピボットするために行番号関数を使用したいと思うでしょう... – ZLK
この関係はありません..データはアルファベット順にソートされました..ピボット後 –