Bri*_*tle 1 sql t-sql sql-server unpivot cross-apply
虽然转置单列非常简单,但我需要转置大量数据,其中需要转置 3 组、10 多个相关列。
create table test
(month int,year int,po1 int,po2 int,ro1 int,ro2 int,mo1 int,mo2 int, mo3 int);
insert into test
values
(5,2013,100,20,10,1,3,4,5),(4,2014,200,30,20,2,4,5,6),(6,2015,200,80,30,3,5,6,7) ;
select * FROM test;
Run Code Online (Sandbox Code Playgroud)
给出
| 月 | 年 | 波1 | 氧分压 | 罗1 | 罗2 | 莫1 | 钼 | 莫3 |
|---|---|---|---|---|---|---|---|---|
| 5 | 2013年 | 100 | 20 | 10 | 1 | 3 | 4 | 5 |
| 4 | 2014年 | 200 | 30 | 20 | 2 | 4 | 5 | 6 |
| 6 | 2015年 | 200 | 80 | 30 | 3 | 5 | 6 | 7 |
使用 UNPIVOT 转置
select
month, year,
PO, RO, MO
from ( SELECT * from test) src
unpivot
( PO for Description in (po1, po2))unpiv1
unpivot
(RO for Description1 in (ro1, ro2)) unpiv2
unpivot
(MO for Description2 in (mo1, mo2, mo3)) unpiv3
order by year
Run Code Online (Sandbox Code Playgroud)
给我这个
| 月 | 年 | 采购订单 | 反渗透 | 莫 |
|---|---|---|---|---|
| 5 | 2013年 | 100 | 10 | 3 |
| 5 | 2013年 | 100 | 10 | 4 |
| 5 | 2013年 | 100 | 10 | 5 |
| 5 | 2013年 | 100 | 1 | 3 |
| 5 | 2013年 | 100 | 1 | 4 |
| 5 | 2013年 | 100 | 1 | 5 |
| 5 | 2013年 | 20 | 10 | 3 |
| 5 | 2013年 | 20 | 10 | 4 |
| 5 | 2013年 | 20 | 10 | 5 |
| 5 | 2013年 | 20 | 1 | 3 |
| 5 | 2013年 | 20 | 1 | 4 |
| 5 | 2013年 | 20 | 1 | 5 |
| 4 | 2014年 | 200 | 20 | 4 |
| 4 | 2014年 | 200 | 20 | 5 |
| 4 | 2014年 | 200 | 20 | 6 |
| 4 | 2014年 | 200 | 2 | 4 |
| 4 | 2014年 | 200 | 2 | 5 |
| 4 | 2014年 | 200 | 2 | 6 |
| 4 | 2014年 | 30 | 20 | 4 |
| 4 | 2014年 | 30 | 20 | 5 |
| 4 | 2014年 | 30 | 20 | 6 |
| 4 | 2014年 | 30 | 2 | 4 |
| 4 | 2014年 | 30 | 2 | 5 |
| 4 | 2014年 | 30 | 2 | 6 |
| 6 | 2015年 | 200 | 30 | 5 |
| 6 | 2015年 | 200 | 30 | 6 |
| 6 | 2015年 | 200 | 30 | 7 |
| 6 | 2015年 | 200 | 3 | 5 |
| 6 | 2015年 | 200 | 3 | 6 |
| 6 | 2015年 | 200 | 3 | 7 |
| 6 | 2015年 | 80 | 30 | 5 |
| 6 | 2015年 | 80 | 30 | 6 |
| 6 | 2015年 | 80 | 30 | 7 |
| 6 | 2015年 | 80 | 3 | 5 |
| 6 | 2015年 | 80 | 3 | 6 |
| 6 | 2015年 | 80 | 3 | 7 |
我想把它变成这样。那可能吗?
| 月 | 年 | 采购订单 | 反渗透 | 莫 |
|---|---|---|---|---|
| 5 | 2013年 | 100 | 10 | 3 |
| 5 | 2013年 | 20 | 1 | 4 |
| 5 | 2013年 | 0 | 0 | 5 |
| 4 | 2014年 | 200 | 20 | 4 |
| 4 | 2014年 | 30 | 2 | 5 |
| 4 | 2014年 | 0 | 0 | 6 |
| 6 | 2015年 | 200 | 30 | 5 |
| 6 | 2015年 | 80 | 3 | 6 |
| 6 | 2015年 | 0 | 0 | 7 |
也许使用如下所示的查询,该查询使用 CROSS APPLY 根据您的设计创建行
select month,year,po,ro,mo from
test cross apply
(values (po1,ro1,mo1), (po2,ro2,mo2),(0,0,mo3))v(po,ro,mo)
Run Code Online (Sandbox Code Playgroud)
在这里查看演示
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |