oracle 行轉列 拼接

作一張數據分析報表的時候,碰到一個問題,馬上想建一張臨時表,而後再次存儲,這樣作的好處是查詢時簡便,壞處是須要寫一個存儲來定時執行,仔細想了想,第二個解決方案,行轉列,合併出結果。函數

需求大概: 經過多表查詢,得出每一個城市每一個月的銷售數量,銷售額,成本,售罄率,折扣率,查詢後結果以下:3d

城市 時間 銷售數量 銷售額
北京 1403 22222 33333333
長沙 1311 11111 11111111
濟南 1312 482809 1079808.12
柳州 1311 21762 442143
柳州 1403 84390 18814.5
寧波 1403 11546 21355.56
深圳 1401 195403 76399.94
深圳 1402 200279 82277.14
武漢 1401 1066 7896.56
武漢 1403 12625 11048.66
湘潭 1311 77231 696441
粵西 1402 11373 7069.86
鄭州 1312 572637 5963448.6
北京 1402 22494 17478789.06
東莞 1402 581290 86475.24
濟南 1311 247097 463499
濟南 1401 730 1369.12
昆明 1312 2354 45833.5
昆明 1403 2486 7145.56
臨沂 1312 10071 506042
臨沂 1402 18583 708995.8
南寧 1402 8212 49307.51
青島 1401 952579 29672.8
曲靖 1402 30289 201449
上海 1311 36290 129948.98
武漢 1402 12834 87302.56
重慶 1401 20754 127677.92

 

而我須要的結果集是這樣:code

 

1101-1130 1201-1231 0101-0131 0201-0228
當月銷售總數量 當月零售價總額 當月折扣率 累計售罄率 當月銷售總數量 當月零售價總額 當月折扣率 累計售罄率 當月銷售總數量 當月零售價總額 當月折扣率 累計售罄率 當月銷售總數量 當月零售價總額 當月折扣率 累計售罄率

須要將每一個月的按順序拼接到後面,查了查資料,這樣作完成:orm

外部再套一層,帶出須要的字段,而且加上這一行:排序

row_number() over(PARTITION BY city order by businessDate asc) rkci

根據city分組,根據businessDate升序排列 。而後在外面再嵌套一層,代碼以下:數據分析

 MAX(decode(rk, 1, businessDate,null)) as businessDate1,
 MAX(decode(rk, 1, total_num, null)) as total_num1,
 MAX(decode(rk, 1, retail_total_amount, null)) as retail_total_amount1,it

 MAX(decode(rk, 2, businessDate,null)) as businessDate2,
 MAX(decode(rk, 2, total_num, null)) as total_num2,
 MAX(decode(rk, 2, retail_total_amount, null)) as retail_total_amount2,table

..............................d3

decode函數的用法不須要我再重複了吧 ?  rk就是剛纔嵌套的層中排序後多出的一列,按照rk的值進行拼接,拼接後就獲得了我想要的結果,一個城市只有一行記錄,按照月份拼接在後面。

相關文章
相關標籤/搜索