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
- mysql動態行轉列MySql
- 利用Jackson的JsonFilter來實現動態過濾資料列(資料列權JSONFilter
- Excel資料庫轉MySQL,實現查詢Excel資料庫MySql
- Java 建立、重新整理Excel透視表/設定透視錶行摺疊、展開JavaExcel
- Excel 如何批次將矩陣(多行多列)資料轉為單行或單列資料Excel矩陣
- Microsoft Excel 教程「2」,如何在 Excel 中建立資料透檢視?ROSExcel
- excel列轉行怎麼做 excel如何轉置行列Excel
- 怎樣實現動態列報表,也就是列數不固定的報表?
- mysql~GROUP_CONCAT實現關係表的行轉列MySql
- SAP ABAP 動態內表實現 ALV橫向按月份動態顯示資料
- 如何快速簡單的實現 Excel資料按列提取Excel
- Excel 透視表如何不重複計數Excel
- 報表如何實現對資料列進行排名分析?
- Python 實現自動化 Excel 報表PythonExcel
- Java實現動態的匯出Excel表功能--用form表單提交JavaExcelORM
- 手動實現ArrayList動態陣列陣列
- 【react】實現動態表單中巢狀動態表單React巢狀
- 如何透過C++ 將資料寫入 Excel 工作表C++Excel
- oracle行轉列、列轉行、連續日期數字實現方式及mybatis下實現方式OracleMyBatis
- java實現將資料庫資料轉化成excel表格顯示出來Java資料庫Excel
- RestCloud ETL抽取動態庫表資料實踐RESTCloud
- Vue+ElementUI實現表單動態渲染、視覺化配置VueUI視覺化
- EasyExcel資料匯出實現、動態表頭生成、SpringBoot3框架ExcelSpring Boot框架
- 圖表外掛Highcharts的動態化賦值,實現圖表資料的動態化設定顯示賦值
- vue中動態修改陣列的展現(資料更新,檢視不更新驗證)Vue陣列
- 160行程式碼實現動態炫酷的視覺化圖表 - 排行榜行程視覺化
- EXcel 資料檢視Excel
- 動手編寫—動態陣列(Java實現)陣列Java
- 基於檔案的表合併及行轉列實現參考
- postgresql中資料表如何透過一個欄位標識資料行多種狀態?SQL
- excel兩列亂序姓名如何一一對應 excel 兩列資料自動配對Excel
- Vue 利用後端的資料字典和Map物件實現表格列欄位動態轉義的處理方案Vue後端物件
- echarts圖表y軸資料反轉的實現Echarts
- Vue.set()實現資料動態響應Vue
- List,DataTable實現行轉列的通用方案