Excel實現動態行轉列(資料透視表)
固定行轉列比較容易實現.
但是動態行轉列的需求,用SQL都難以實現,要不然就是超級複雜。
不過很多第三方工具都已經提供了很好的支援,不一定非得用SQL實現.比如帆軟報表和Excel。
最近接到一個比較複雜的查詢,並且要求動態行轉列.
查詢的SQL如下
由於這個SQL已然比較複雜,再加動態行轉列,可讀性幾乎就沒有了.
這個SQL查詢的結果大致如下。
其中type可能是釋出或者稽核.
ts 表示月 日 和小時
cn表示模組型別
val表示數量.
將這個結果匯入至Excel
選擇插入,資料透視表
然後將ts 設定為列標籤,這樣 ts 就由行變成列顯示
cn和type作為行標籤.
val作為顯示數值
然後選擇檢視->凍結窗格->凍結首列 方便觀看資料
可以看到如下結果
完全符合動態行轉列的需求,並且可以排序和篩選.太強大了.
但是動態行轉列的需求,用SQL都難以實現,要不然就是超級複雜。
不過很多第三方工具都已經提供了很好的支援,不一定非得用SQL實現.比如帆軟報表和Excel。
最近接到一個比較複雜的查詢,並且要求動態行轉列.
查詢的SQL如下
- select type,ts,cn,cast(val as DECIMAL) val from (
- select
- starttime,'釋出' type,base.ts,base.cn,ifnull(t1.val,0) val
- from
- (
- select
- t1.*,
- startdate+ interval id-1 hour starttime,
- startdate+ interval id hour endtime,
- date_format(startdate+ interval id-1 hour,'%m%d%H') ts,
- vars.*
- from nums ,(select ${starttime} startdate,${endtime} enddate) vars,
- (
- select 'mvbox_user.user_otherinfo' busidatatype,1 type,'內容稽核.個人資料' cn union all
- select 'mvbox_user.user_baseinfo',1,'內容稽核.個人喜好' union all
- select 'photo_album',1,'內容稽核.相簿資訊' union all
- select 'photo_list',1,'內容稽核.圖片資訊' union all
- select 'music_original',1,'內容稽核.原唱資訊' union all
- select 'music_cover',1,'內容稽核.翻唱資訊' union all
- select 'music_accompany',1,'內容稽核.伴奏資訊' union all
- select 'music_album',1,'內容稽核.音樂專輯' union all
- select 'music_video',1,'內容稽核.影片資訊' union all
- select 'blog_album',1,'內容稽核.日誌與文章' union all
- select 'mvbox_user.user_baseinfo',2,'內容稽核.MVBOX頭像稽核'
- ) t1
- where id<= TIMESTAMPDIFF(hour,startdate,enddate)
- order by busidatatype,type,starttime
- ) base left join
- (
- select busidatatype,type,date_format(createtime,'%m%d%H') ts,count(*) val from audit_obj_detail
- where createtime>=${starttime} and createtime<${endtime}
- and busitype = 'mvbox'
- group by busidatatype,type,date_format(createtime,'%m%d%H')
- ) t1 on (base.busidatatype=t1.busidatatype and base.type=t1.type and base.ts=t1.ts)
- group by base.busidatatype,base.type,base.ts,base.cn
- union all
- select
- starttime, '稽核' type,base.ts,base.cn,ifnull(t1.val,0) val
- from
- (
- select
- t1.*,
- startdate+ interval id-1 hour starttime,
- startdate+ interval id hour endtime,
- date_format(startdate+ interval id-1 hour,'%m%d%H') ts,
- vars.*
- from nums ,(select ${starttime} startdate,${endtime} enddate) vars,
- (
- select 'mvbox_user.user_otherinfo' busidatatype,1 type,'內容稽核.個人資料' cn union all
- select 'mvbox_user.user_baseinfo',1,'內容稽核.個人喜好' union all
- select 'photo_album',1,'內容稽核.相簿資訊' union all
- select 'photo_list',1,'內容稽核.圖片資訊' union all
- select 'music_original',1,'內容稽核.原唱資訊' union all
- select 'music_cover',1,'內容稽核.翻唱資訊' union all
- select 'music_accompany',1,'內容稽核.伴奏資訊' union all
- select 'music_album',1,'內容稽核.音樂專輯' union all
- select 'music_video',1,'內容稽核.影片資訊' union all
- select 'blog_album',1,'內容稽核.日誌與文章' union all
- select 'mvbox_user.user_baseinfo',2,'內容稽核.MVBOX頭像稽核'
- ) t1
- where id<= TIMESTAMPDIFF(hour,startdate,enddate)
- order by busidatatype,type,starttime
- ) base left join
- (
- select busidatatype,type,date_format(AuditTime,'%m%d%H') ts,count(*) val from audit_obj_detail
- where AuditTime>=${starttime} and AuditTime<${endtime}
- and busitype = 'mvbox'
- group by busidatatype,type,date_format(AuditTime,'%m%d%H')
- ) t1 on (base.busidatatype=t1.busidatatype and base.type=t1.type and base.ts=t1.ts)
- group by base.busidatatype,base.type,base.ts,base.cn
- ) t1 ;
由於這個SQL已然比較複雜,再加動態行轉列,可讀性幾乎就沒有了.
這個SQL查詢的結果大致如下。
其中type可能是釋出或者稽核.
ts 表示月 日 和小時
cn表示模組型別
val表示數量.
將這個結果匯入至Excel
選擇插入,資料透視表
然後將ts 設定為列標籤,這樣 ts 就由行變成列顯示
cn和type作為行標籤.
val作為顯示數值
然後選擇檢視->凍結窗格->凍結首列 方便觀看資料
可以看到如下結果
完全符合動態行轉列的需求,並且可以排序和篩選.太強大了.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2146291/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Excel資料透視表怎麼做 Excel資料透視表技巧Excel
- 透視表excel透視表怎麼做 excel的資料透視表怎麼弄Excel
- Excel資料分析入門-資料透視表Excel
- EXCEL破冰 - 如何為透視表組織資料Excel
- EXCEL資料透視表工具Excel
- 升值加薪Excel神助攻,資料透視表堪稱神器!Excel
- 動態行轉列
- /*列轉行查詢表資料*/
- 動態固定行轉列
- mysql動態行轉列MySql
- Oracle元件實現動態Web資料庫(轉)Oracle元件Web資料庫
- Java 建立、重新整理Excel透視表/設定透視錶行摺疊、展開JavaExcel
- Microsoft Excel 教程「2」,如何在 Excel 中建立資料透檢視?ROSExcel
- Excel資料庫轉MySQL,實現查詢Excel資料庫MySql
- 怎樣實現動態列報表,也就是列數不固定的報表?
- 利用Jackson的JsonFilter來實現動態過濾資料列(資料列權JSONFilter
- ActiveReports 報表應用教程 (7)---交叉報表及資料透檢視實現方案
- Excel 如何批次將矩陣(多行多列)資料轉為單行或單列資料Excel矩陣
- Excel 透視表如何不重複計數Excel
- Kettle實現行轉列
- sql實現行轉列SQL
- 報表如何實現對資料列進行排名分析?
- 手動實現ArrayList動態陣列陣列
- 如何快速簡單的實現 Excel資料按列提取Excel
- SAP ABAP 動態內表實現 ALV橫向按月份動態顯示資料
- Java實現動態的匯出Excel表功能--用form表單提交JavaExcelORM
- 【react】實現動態表單中巢狀動態表單React巢狀
- [Echarts視覺化] 二.php和ajax連線資料庫實現動態資料視覺化Echarts視覺化PHP資料庫
- excel列轉行怎麼做 excel如何轉置行列Excel
- Python 實現自動化 Excel 報表PythonExcel
- 如何透過C++ 將資料寫入 Excel 工作表C++Excel
- 分隔字串實現列轉行字串
- Vue+ElementUI實現表單動態渲染、視覺化配置VueUI視覺化
- RestCloud ETL抽取動態庫表資料實踐RESTCloud
- 使用動態SQL語句實現簡單的行列轉置(動態產生列)SQL
- vue中動態修改陣列的展現(資料更新,檢視不更新驗證)Vue陣列
- 完成Excel動態連結外部資料庫Excel資料庫
- 通過 SQL 實現行轉列(列的資料條目、資料分佈是不規則的)SQL