如果已经提出这个问题,请道歉,但我找不到如何做到这一点。
我有这张桌子:
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
...
答案 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;