SQL将列转换为行

时间:2018-01-22 19:44:27

标签: sql sql-server tsql pivot unpivot

我一直在阅读很多关于SQL Pivots和Unpivots的内容,但我不确定如何解决我目前遇到的问题。

基本上,这是我的数据集。

ItemNumber | Category 1 | Category 2 | Category 3
00001           Books      Children      Beginner
00002           Games      Adults        Advanced

如何旋转此表以获得此结果?

ItemNumber  |   00001       |    00002
Category 1     Books            Games   
Category 2     Children         Adults
Category 3     Beginner        Advanced

我正在阅读有关Unpivoting的内容,但看起来像Unpivoting在我的情况下不起作用。

会感激一些帮助。

1 个答案:

答案 0 :(得分:2)

你可以使用它。

DECLARE @T TABLE ( ItemNumber VARCHAR(10), [Category 1] VARCHAR(10), [Category 2] VARCHAR(10), [Category 3] VARCHAR(10))
INSERT INTO @T VALUES
('00001','Books','Children','Beginner'),
('00002','Games','Adults','Advanced')

SELECT Col ItemNumber,  [00001], [00002] FROM @T 
    UNPIVOT( Val FOR Col IN ([Category 1],[Category 2],[Category 3])) UNPVT
    PIVOT (MAX(Val) FOR ItemNumber IN ([00001],[00002])) PVT

结果:

ItemNumber               00001      00002
------------------------ ---------- ----------
Category 1               Books      Games
Category 2               Children   Adults
Category 3               Beginner   Advanced