Oracle實(shí)現(xiàn)豎表轉(zhuǎn)橫表的幾種常用方法小結(jié)
oracle實(shí)現(xiàn)豎表轉(zhuǎn)橫表的幾種常用方法小結(jié)
有能耗表,記錄各個城市水、電、熱的能耗情況,表結(jié)構(gòu)如下:
名稱 | 類型 | 備注 |
---|---|---|
e_code | varchar2(10) | 城市的code |
e_value | number | 能耗值,包括水耗、電耗、熱耗 |
e_time | varchar2(20) | 時間 |
e_type | number | 能耗類型,0:水耗,1:電耗,2:熱耗 |
插入測試數(shù)據(jù),如下:
e_code | e_value | e_time | e_type |
---|---|---|---|
bj | 20.05 | 2018-08-29 01:00:00 | 0 |
bj | 36.35 | 2018-08-29 01:00:00 | 1 |
bj | 45.223 | 2018-08-29 01:00:00 | 2 |
sh | 22.95 | 2018-08-29 01:00:00 | 0 |
sh | 18.4556 | 2018-08-29 01:00:00 | 1 |
sh | 33.254 | 2018-08-29 01:00:00 | 2 |
gz | 48.554 | 2018-08-29 01:00:00 | 0 |
gz | 21.112 | 2018-08-29 01:00:00 | 1 |
gz | 25.625 | 2018-08-29 01:00:00 | 2 |
上面的表格是一張豎表,而我們想得到的是橫表,即行轉(zhuǎn)列,獲得如下結(jié)果
編號 | 時間 | 水耗 | 電耗 | 熱耗 |
---|---|---|---|---|
sh | 2018-08-29 01:00:00 | 22.95 | 18.4556 | 33.254 |
gz | 2018-08-29 01:00:00 | 48.554 | 21.112 | 25.625 |
bj | 2018-08-29 01:00:00 | 20.05 | 36.35 | 45.223 |
實(shí)現(xiàn)豎表轉(zhuǎn)橫表的查詢,即行轉(zhuǎn)列,通常有兩種常用方法。
第一種:使用decode實(shí)現(xiàn)
select e_code, e_time, sum( decode(e_type, 0, e_value) ) as water_energy,--水耗 sum( decode(e_type, 1, e_value) ) as ele_energy,--電耗 sum( decode(e_type, 2, e_value) ) as heat_energy--熱耗 from thtf_energy_test group by e_code,e_time
輸出如下:
e_code | e_time | water_energy | ele_energy | heat_energy |
---|---|---|---|---|
sh | 2018-08-29 00:00:00 | 22.95 | 18.4456 | 33.2540 |
gz | 2018-08-29 00:00:00 | 48.5540 | 21.1120 | 25.6250 |
bj | 2018-08-29 00:00:00 | 20.05 | 36.35 | 45.2230 |
第二種:使用case when實(shí)現(xiàn)
簡單case when函數(shù):
select e_code, e_time, sum( case e_type when 0 then e_value else 0 end ) as water_energy,--水耗 sum( case e_type when 1 then e_value else 0 end ) as ele_energy,--電耗 sum( case e_type when 2 then e_value else 0 end ) as heat_energgy--熱耗 from thtf_energy_test group by e_code,e_time
輸出結(jié)果同上:
e_code | e_time | water_energy | ele_energy | heat_energy |
---|---|---|---|---|
sh | 2018-08-29 00:00:00 | 22.95 | 18.4456 | 33.2540 |
gz | 2018-08-29 00:00:00 | 48.5540 | 21.1120 | 25.6250 |
bj | 2018-08-29 00:00:00 | 20.05 | 36.35 | 45.2230 |
case when函數(shù)功能很強(qiáng)大、實(shí)用,使用起來也簡單易懂。在此篇文章詳細(xì)介紹:case when 用法詳解
關(guān)于oracle實(shí)現(xiàn)豎表轉(zhuǎn)橫表的幾種常用方法小結(jié)的文章就介紹至此,更多相關(guān)oracle 豎表轉(zhuǎn)橫表內(nèi)容請搜索碩編程以前的文章,希望以后支持碩編程!
相關(guān)文章