如何减少10+联合选择语句

时间:2015-08-21 01:43:00

标签: sql-server union

我需要从单个表的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

感谢您提前的时间:)

2 个答案:

答案 0 :(得分:2)

使用Cross ApplyUnPivot可以避免多个UNION语句

select Distinct COL
from table 
Cross apply
(
values 
(column_1),
(column_2),
..
..
(column_18)
) 
CS (COL) 

注意:由于您已使用UNION我已在Distinct中保留select。如果您不想删除重复项,请从select

中删除Distinct

答案 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