Oracle實(shí)現(xiàn)豎表轉(zhuǎn)橫表的幾種常用方法小結(jié)
有能耗表,記錄各個(gè)城市水、電、熱的能耗情況,表結(jié)構(gòu)如下:
名稱 | 類型 | 備注 |
---|---|---|
E_CODE | VARCHAR2(10) | 城市的CODE |
E_VALUE | NUMBER | 能耗值,包括水耗、電耗、熱耗 |
E_TIME | VARCHAR2(20) | 時(shí)間 |
E_TYPE | NUMBER | 能耗類型,0:水耗,1:電耗,2:熱耗 |
插入測(cè)試數(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é)果
編號(hào) | 時(shí)間 | 水耗 | 電耗 | 熱耗 |
---|---|---|---|---|
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)
簡(jiǎ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í)用,使用起來(lái)也簡(jiǎn)單易懂。在此篇文章詳細(xì)介紹:CASE WHEN 用法詳解
到此這篇關(guān)于Oracle實(shí)現(xiàn)豎表轉(zhuǎn)橫表的幾種常用方法小結(jié)的文章就介紹到這了,更多相關(guān)Oracle 豎表轉(zhuǎn)橫表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Oracle開(kāi)發(fā)之分析函數(shù)總結(jié)
本文是對(duì)Oracle中分析函數(shù)做的總結(jié),主要總結(jié)了前幾篇關(guān)于分析函數(shù)、窗口函數(shù)、報(bào)表函數(shù)文章的內(nèi)容,需要的朋友可以參考下。2016-05-05Oracle與SQL Server在企業(yè)應(yīng)用的比較
Oracle與SQL Server在企業(yè)應(yīng)用的比較...2007-03-03Oracle 獲得以百分號(hào)結(jié)尾的腳本有三種寫(xiě)法
本節(jié)主要介紹了Oracle 獲得以百分號(hào)結(jié)尾的腳本有三種寫(xiě)法,以獲得ID=4443的數(shù)據(jù)行為例2014-07-07ORACLE中查找定位表最后DML操作的時(shí)間小結(jié)
在Oracle數(shù)據(jù)庫(kù)中,如何查找,定位一張表最后一次的DML操作的時(shí)間呢? 方式有三種,不過(guò)都有一些局限性,下面簡(jiǎn)單的解析、總結(jié)一下。感興趣的朋友跟隨小編一起看看吧2018-11-11Oracle數(shù)據(jù)庫(kù)TNS常見(jiàn)錯(cuò)誤的解決方法匯總
這篇文章主要介紹了Oracle數(shù)據(jù)庫(kù)TNS常見(jiàn)錯(cuò)誤的解決方法,需要的朋友可以參考下2014-07-07Oracle性能究極優(yōu)化(Oracle 性能優(yōu)化)
Linux Journal 發(fā)表了一篇優(yōu)化 Oracle 數(shù)據(jù)庫(kù)的文章,感覺(jué)十分的有用。簡(jiǎn)要介紹其摘要和大家共同分享 Linux 在企業(yè)級(jí)數(shù)據(jù)庫(kù)上應(yīng)用2007-03-03Oracle 數(shù)據(jù)庫(kù)連接查詢SQL語(yǔ)句
oracle 連接查詢分如下幾種方法,大家可以看看,整理了下oracle 內(nèi)外鏈接。2009-08-08oracle查看當(dāng)前日期是第幾個(gè)星期的方法
oracle查看當(dāng)前日期是第幾個(gè)星期方法的代碼段,需要的朋友可以參考一下2013-02-02