如何减少 10+ union select 语句

How to reduce 10+ union select statements

我需要从单个 table 的 10 多列数据中提取单列数据。除了堆叠 10 多个 union select 语句之外,是否还有另一种方法可以在不为每一列重复 union select 语句的情况下执行此操作?

我可以通过堆叠 10 多个 select 语句来获得它,如下所示:

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

提前感谢您抽出时间:)

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

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

注:自从你用了UNION我就把Distinct留在了select。如果您不想删除重复项,请从 select

中删除 Distinct

使用 UNPIVOT 的查询看起来像这样....

SELECT *
FROM TableName t 
  UNPIVOT (Vals FOR N IN (Column1, Column2, Column3,....,Column10))up

重要注意 IN 子句中的所有列必须是相同的数据类型,如果它们不是使用子查询将它们转换为统一的数据类型,然后将它们反透视,例如.. .

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