将查询中的任意一行拆分为多行

时间:2014-09-11 20:30:59

标签: sql-server select multiple-records

我有一个包含这些列的表:a,b1,b2,b3

我希望从这个表中获得这样的查询:

_______________
| col1 | col2 |
|-------------|
|   a  |  b1  |
|   a  |  b2  |
|   a  |  b3  |
|_____________|

是否可以使用SELECT命令?

1 个答案:

答案 0 :(得分:2)

执行UNION ALL是一种方式,但您也可以使用UNPIVOT查询,请参阅下文,

无论如何,我认为UNPIVOT将比多次联合更有效率。

SQL Fiddle

MS SQL Server 2008架构设置

查询1

DECLARE @TABLE TABLE(col1 VARCHAR(5), col2 VARCHAR(5)
             , Col3 VARCHAR(5), Col4 VARCHAR(5))
INSERT INTO @TABLE VALUES 
   ( 'a' , 'B1', 'B2', 'B3'),
   ( 'd' , 'E1', 'E2', 'E3')


SELECT col1 
      ,Vals AS Col2
FROM @TABLE t 
UNPIVOT (Vals FOR N IN (col2,col3,col4) ) up

<强> Results

| COL1 | COL2 |
|------|------|
|    a |   B1 |
|    a |   B2 |
|    a |   B3 |
|    d |   E1 |
|    d |   E2 |
|    d |   E3 |