将多个列合并为单个列

时间:2015-09-01 14:39:02

标签: sql sql-server

如果已经提出这个问题,请道歉,但我找不到如何做到这一点。

我有这张桌子:

ID    Col1     Col2     Col3    Col4     Col5     Col6
------------------------------------------------------
1     1a       1b       1c       1d       1e       1f
2     2a       2b       2c       2d       2e       2f
3     3a       3b       3c       3d       3e       3f

如何将所有6列中的所有值转换为单个列表?性能对我所需要的是重要的。

ColValue
------------------
1a
1b
1c
...
2a
2b
2c
...
3a
3b
3c
...

4 个答案:

答案 0 :(得分:3)

您可以在UNPIVOT

的帮助下实现这一目标
-- Row to multiple column
declare @Data TABLE (Id INT,  Col1 VARCHAR(20)
, Col2 VARCHAR(20), Col3 VARCHAR(20), Col4 VARCHAR(20))
INSERT INTO @Data VALUES
(1  ,  '1a',  '1b'  ,'1c','1d'),
(2  ,  '2a',  '2b'  ,'2c','2d'),
(3  ,  '3a',  '3b'  ,'3c','3d')

SELECT Id,Value
FROM @Data t
UNPIVOT (Value FOR Alias IN (Col1, Col2, Col3,Col4))pp

答案 1 :(得分:1)

您可以使用Thread

union all

答案 2 :(得分:1)

您可以使用Unpivot。即:

SELECT  ColName
FROM    myTable UNPIVOT
  ( COLName FOR col IN ( Col1, Col2, Col3, Col4, Col5, Col6 ) ) AS unpvt;

答案 3 :(得分:0)

使用UNPIVOT,您可以直接从表格中选择:

create table mytable (ID int,    
                      Col1  varchar(2),  
                      Col2 varchar(2),     
                      Col3 varchar(2),   
                      Col4 varchar(2),   
                      Col5 varchar(2),    
                      Col6 varchar(2));

insert into mytable values
(1, '1a', '1b', '1c', '1d', '1e', '1f'),
(2, '2a', '2b', '2c', '2d', '2e', '2f'),
(3, '3a', '3b', '3c', '3d', '3e', '3f');

取消透视查询:

SELECT ID, ColValue
FROM
(
  SELECT ID, Col1, Col2, Col3, Col4, Col5, Col6 
  FROM mytable
) AS cp
UNPIVOT 
(
  ColValue FOR Cols IN (Col1, Col2, Col3, Col4, Col5, Col6 )
) AS up;

SQL Fiddle Demo