我正在寻找一种方法,将表中的行转换为列行,并为每个行指定列名。
Players Id Team
john 1 t1
carmel 1 t1
jack 1 t1
james 1 t1
更改为:
Id Team p1 p2 p3 p4
1 t1 john carmel jack james
上面的例子中可以有任意数量的玩家。 我尝试使用pivot。我可以将行更改为列,但不是以我正在寻找的方式。
答案 0 :(得分:3)
这是使用动态交叉表的一种方法。有关详细信息,请阅读Jeff Moden的article。
DECLARE @sql1 VARCHAR(4000) = ''
DECLARE @sql2 VARCHAR(4000) = ''
DECLARE @sql3 VARCHAR(4000) = ''
SELECT @sql1 =
'SELECT
Id
, Team
'
SELECT @sql2 = @sql2 +
' , MAX(CASE WHEN RN = ' + CONVERT(VARCHAR(10), RN) + ' THEN Players END) AS [' + CONVERT(VARCHAR(10), RN) + ']' + CHAR(10)
FROM(
SELECT DISTINCT
RN = ROW_NUMBER() OVER(PARTITION BY Id, Team ORDER BY (SELECT NULL))
FROM Tbl
)t
ORDER BY RN
SELECT @sql3 =
'FROM(
SELECT *,
RN = ROW_NUMBER() OVER(PARTITION BY Id, Team ORDER BY (SELECT NULL))
FROM Tbl
)t
GROUP BY
Id, Team'
PRINT (@sql1 + @sql2 + @sql3)
EXEC (@sql1 + @sql2 + @sql3)