SQL 将列更改为行但保留一列作为所有行之前的列
SQL change columns to row but keep one column as the column before all the rows
例子
Team | Person1 | Person2 | Person3
改为
Team | Person 1
Team | Person 2
Team | Person 3
我不确定如何准确描述我想做的事情,抱歉,如果这是重复的。
我认为您可以尝试(除了评论中提到的解决方案用户@GoatCO)以下查询:
SELECT Team, [Person 1] As Person_Column
FROM _table
UNION ALL
SELECT Team, [Person 2] As Person_Column
FROM _table
UNION ALL
SELECT Team, [Person 3] As Person_Column
FROM _table
使用UNPIVOT
对于 table dbo.Teams,使用您的示例:
SELECT Team, Person
FROM
(
SELECT Team, Person1, Person2, Person3
FROM dbo.Teams
) as cp
UNPIVOT
(
Person FOR Persons IN (Person1, Person2, Person3)
) AS up;
虽然使用 UNIONs
有效,但它不能很好地扩展,您需要转置的每个额外列的成本都更高。
注意:这基本上是 this 文章中几乎相同问题的解决方案的克隆,由用户@Goat CO 在最初的问题评论中提供。有关其他信息,请参阅 link并扩展此解决方案。
例子
Team | Person1 | Person2 | Person3
改为
Team | Person 1
Team | Person 2
Team | Person 3
我不确定如何准确描述我想做的事情,抱歉,如果这是重复的。
我认为您可以尝试(除了评论中提到的解决方案用户@GoatCO)以下查询:
SELECT Team, [Person 1] As Person_Column
FROM _table
UNION ALL
SELECT Team, [Person 2] As Person_Column
FROM _table
UNION ALL
SELECT Team, [Person 3] As Person_Column
FROM _table
使用UNPIVOT
对于 table dbo.Teams,使用您的示例:
SELECT Team, Person
FROM
(
SELECT Team, Person1, Person2, Person3
FROM dbo.Teams
) as cp
UNPIVOT
(
Person FOR Persons IN (Person1, Person2, Person3)
) AS up;
虽然使用 UNIONs
有效,但它不能很好地扩展,您需要转置的每个额外列的成本都更高。
注意:这基本上是 this 文章中几乎相同问题的解决方案的克隆,由用户@Goat CO 在最初的问题评论中提供。有关其他信息,请参阅 link并扩展此解决方案。