作一張數據分析報表的時候,碰到一個問題,馬上想建一張臨時表,而後再次存儲,這樣作的好處是查詢時簡便,壞處是須要寫一個存儲來定時執行,仔細想了想,第二個解決方案,行轉列,合併出結果。函數
需求大概: 經過多表查詢,得出每一個城市每一個月的銷售數量,銷售額,成本,售罄率,折扣率,查詢後結果以下: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的值進行拼接,拼接後就獲得了我想要的結果,一個城市只有一行記錄,按照月份拼接在後面。