Sql行到表转换查询

时间:2017-05-17 05:42:29

标签: sql

我是SQL的新手,我有一个典型的要求。

例如,我在表格中有以下数据,

*-----------*-----*----*----*----*----*----*----*----*----*
| date      |  x1 | x2 | x3 | y1 | y2 | y3 | z1 | z2 | z3 |
*-----------*-----*----*----*----*----*----*----*----*----*
|2017-05-15 | 11  | 12 |15  | 21 | 31 | 41 | 0.1| 0.4| 0.5|
*-----------*-----*----*----*----*----*----*----*----*----*

现在我想写一个查询结果如下:

   date    a1 b1  c1
2017-05-17 11 21 0.1
2017-05-17 12 31 0.4
2017-05-17 15 41 0.5

有可能吗?如果是的话怎么样?

任何帮助都很好。

1 个答案:

答案 0 :(得分:0)

如果列格式如上所述那么我想这将解决您的问题:

declare @data table (date varchar(10),x1 int,x2 int,x3 int,y1 int,y2 int,y3 int,z1  numeric(5,2),z2  numeric(5,2),z3 numeric(5,2))

insert into @data values ('2017-05-15',11,12,15,21,31,41,0.1,0.4,0.5)
select date,x1 as 'a1',y1 as 'b1', z1 as 'c1' from @data
union all 
select date,x2 as 'a2',y2 as 'b2', z2 as 'c2' from @data
union all
select date,x3 as 'a3',y3 as 'b3', z3 as 'c3' from @data

结果是:

|-----------|---|---|-----|
|DATE       |a1 |b1 |c1   |
|-----------|---|---|-----| 
|2017-05-15 |11 |21 |0.10 |
|-----------|---|---|-----| 
|2017-05-15 |12 |31 |0.40 |
|-----------|---|---|-----| 
|2017-05-15 |15 |41 |0.50 |
|-----------|---|---|-----|