ORACLE 簡單列轉行操作 Pivot

2021-09-12 16:21:30 字數 1441 閱讀 4681

本文主要簡單介紹下pivot這個函式

這個函式是oracle 11g的時候新加的,相比之前要自己拼語句要來的簡單多

該函式的固定用法

假設有一張訂單表 cp_order,我需要統計每天每個支付渠道收款的金額

select trans_date,channel_id,sum(order_amt) total_amt from cp_order where 

trans_date >='20190119' and trans_date <='20190120'

group by channel_id,trans_date order by trans_date desc;

結果如下,如果要實現渠道作為標題的話,正常是需要拼語句實現,如果oracle11g 可以使用pivot函式來實現這轉換

trans_date channel_id total_amt    

20190120 ali_face 0.04

20190120 ali_wap 0.01

20190120 wx_bar 0.01

20190120 wx_pub 0.01

20190119 ali_bar 0.04

固定執行格式:

select * from (

select channel_id,order_amt,trans_date from cp_order c where trans_date >='20190119' and trans_date <='20190120'

)pivot

( sum(order_amt) for channel_id in ('ali_face','ali_wap','wx_bar','wx_pub','ali_bar')

);

結果如下:

trans_date 'ali_face' 'ali_wap' 'wx_bar' 'wx_pub' 'ali_bar'

20190119 0.04

20190120 0.04 0.01 0.01 0.01

可能大家注意到pivot子語句中in的字元是寫死的,這個是可以替換成子查詢語句的,但是輸出的格式就會有點不一樣,根據官方文件描述,輸出的格式會變成xml,寫法要變成pivot xml(...)

以上參考文件:

pivot 和 unpivot

ORACLE 簡單列轉行操作 Pivot

本文主要簡單介紹下pivot這個函式 這個函式是oracle 11g的時候新加的,相比之前要自己拼語句要來的簡單多 該函式的固定用法 假設有一張訂單表 cp order,我需要統計每天每個支付渠道收款的金額 select trans date,channel id,sum order amt tot...

oracle列轉行操作

這裡有兩張表,一張是錯誤類別表 ac dict option 另外一張是錯誤資訊表 mr meterdata 分別需要統計基礎資訊表中 性質變更 正常 霧珠 三種狀態的裝置數量,在group by 之後使用pivot 進行行列的變換.select from select from select me...

單列模式 和 操作XML方法 和 簡單工廠模式

一.單列模式 1 首先,該singleton的建構函式必須是私有的,以保證客戶程式不會通過new 操作產生乙個例項,達到實現單例的目的 2 因為靜態變數的生命週期跟整個應用程式的生命週期是一樣的,所以可以定義乙個私有的靜態全域性變數instance來儲存該類的唯一例項 3 必須提供乙個全域性函式訪問...