SELECT 语句将列转换为行

SELECT statement to convert columns into rows

我们有一个包含一行四列的结果集:

value1, value2, value3, value4

如何变成四行一列的结果集:

value1
value2
value3
value4

如果列已知:

SELECT Value FROM(
    SELECT Value = value1
    FROM dbo.TableName
    UNON ALL
    SELECT Value = value2
    FROM dbo.TableName
    UNON ALL
    SELECT Value = value3
    FROM dbo.TableName
    UNON ALL
    SELECT Value = value4
    FROM dbo.TableName
) X
ORDER BY VALUE -- in case you want that

只要您使用的是 SQL 2005 或更高版本,您就可以使用 UNPIVOT

SELECT value
FROM (SELECT a, b, c, d FROM myTable) as x
UNPIVOT (value FOR vx IN (a,b,c,d)) as p 

另请参阅 TechNetUsing PIVOT and UNPIVOT

UNPIVOT 数据的另一种方法是使用 CROSS APPLY:

select value
from (Your select statement) as x
cross apply
( 
  select 'value1', value1 union all
  select 'value2', value2 union all
  select 'value3', value3 union all
  select 'value4', value4
) c (ColumnName, value);

Demo