雖然轉置單列非常簡單,但我需要轉置大量資料,其中需要轉置 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;
給
| 月 | 年 | po1 | po2 | ro1 | ro2 | 莫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
給我這個
| 月 | 年 | 采購訂單 | 反滲透 | 莫 |
|---|---|---|---|---|
| 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 |
uj5u.com熱心網友回復:
也許使用像下面這樣的查詢,它使用 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)
在此處查看演示
uj5u.com熱心網友回復:
Unpivot行為類似于union,union all在您的情況下使用
SELECT month,
year,
po1 AS PO,
ro1 AS RO,
mo1 AS MO
FROM test
UNION ALL
SELECT month,
year,
po2,
ro2,
mo2
FROM test
UNION ALL
SELECT month,
year,
0,
0,
mo2
FROM test
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/462425.html
