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并扩展此解决方案。