如何将多列合并为一列?

11

我正在编写一个查询,希望结果显示在一列中。目前的结果显示如下:

Column1     Column2    column3
1              A         CAT

我希望结果返回如下

Column1
1
A
CAT

1
你需要使用 Unpivot - uzi
3个回答

21
SELECT Column1 FROM TableName
UNION ALL
SELECT Column2 FROM TableName
UNION ALL
SELECT Column3 FROM TableName

如果不想有重复的值,请使用UNION,而不是UNION ALL
您还可以使用UNPIVOT运算符来完成此操作。
SELECT Column123
FROM
(
  SELECT Column1, Column2, Column3 
  FROM TableName
) AS tmp
UNPIVOT 
(
  Column123 FOR ColumnAll IN (Column1, Column2, Column3)
) AS unpvt;

https://www.w3schools.com/sql/sql_union.asp
https://www.mssqltips.com/sqlservertip/3000/use-sql-servers-unpivot-operator-to-help-normalize-output/


2
答案是……这要视情况而定。
如果列数未知..那么请像UZI建议的那样使用unpivot。
如果您知道所有列并且它是一个小有限集合..
您可以简单地执行。
Select
column1
from table

union all
select column2
from table

union all
select column3
from table

2
T表与3行派生表的笛卡尔积。(#t的每一行都重复3次,对于a=1和a=2和a=3)。对于第一种情况,我们从Column1中取值,对于第二种情况,我们从Column2中取值,对于第三种情况,我们从Column3中取值。这里当然有并集和联接,但我认为标题的问题意味着单次扫描表格。
CREATE TABLE #t (Column1 NVARCHAR(25),Column2 NVARCHAR(25), column3 NVARCHAR(25))

INSERT INTO #t
SELECT '1','A','CAT'

SELECT
CASE a WHEN 1 THEN Column1  WHEN 2 THEN Column2 ELSE column3 END col
FROM #t, (SELECT 1 a UNION ALL SELECT 2 UNION ALL SELECT 3) B

DROP TABLE #t

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接