我需要从单个表的10列以上提取单列数据。而不是堆叠10+联合选择语句,有没有另一种方法来做到这一点,而不重复每列的联合选择语句?
我可以通过堆叠10多个选择语句来获得它,如下所示:
select 'column_5' from table_a
union
select 'column_6' from table_a
union
select 'column_7' from table_a
union
.
.
.
union
select 'column_18' from table_a
感谢您提前的时间:)
答案 0 :(得分:2)
使用Cross Apply
或UnPivot
可以避免多个UNION
语句
select Distinct COL
from table
Cross apply
(
values
(column_1),
(column_2),
..
..
(column_18)
)
CS (COL)
注意:由于您已使用UNION
我已在Distinct
中保留select
。如果您不想删除重复项,请从select
答案 1 :(得分:1)
使用UNPIVOT的查询看起来像这样....
SELECT *
FROM TableName t
UNPIVOT (Vals FOR N IN (Column1, Column2, Column3,....,Column10))up
重要提示请注意IN
子句中的所有列必须具有相同的数据类型,如果它们不使用子查询将它们转换为统一数据类型,然后将它们取消像... < / p>
SELECT *
FROM (
SELECT CAST(Column1 AS VARCHAR(200)) AS Column1
,CAST(Column2 AS VARCHAR(200)) AS Column2
,CAST(Column3 AS VARCHAR(200)) AS Column3
,.....
,CAST(Column10 AS VARCHAR(200)) AS Column10
FROM TableName) t
UNPIVOT (Vals FOR N IN (Column1, Column2, Column3,....,Column10))up