原表結構如下,我們可以發現,“日運輸量”和“車次”是在同一張表中相互獨立的兩個欄位,即獨立的兩列資料,下面,我將系統中的測試資料以及程式碼全部放出來,以解釋列轉行的操作方法
原表資料庫查詢程式碼:
1 SELECT 2 yzrq AS 運作日期, 3 DATE_FORMAT( yzrq, '%Y-%m' ) AS 年月, 4 rysl AS 日運輸量, 5 jldw AS 計量單位, 6 cc AS 車次 7 FROM 8 uf_ysmxb
原表查詢結果:
目標:車次需要按月進行統計,相當於列轉行
最終需要欄位:年月、月度發貨量、發貨量型別
第一步:我們需要單獨將車次資料提取出來
SELECT yzrq, DATE_FORMAT( yzrq, '%Y-%m' ) AS 年月, cc AS 日運輸量, '車次' AS 發貨量型別 FROM uf_ysmxb
第二步:使用union all與其他的資料合併(到這裡就已經實現了列轉行的操作),注意,合併的兩張表必須保證欄位型別和名字一致
SELECT yzrq AS 運作日期, DATE_FORMAT( yzrq, '%Y-%m' ) AS 年月, rysl AS 日運輸量, CASE jldw WHEN 34 THEN '重量' ELSE '體積' END AS 發貨量型別 FROM uf_ysmxb UNION ALL SELECT yzrq, DATE_FORMAT( yzrq, '%Y-%m' ) AS 年月, cc AS 日運輸量, '車次' AS 發貨量型別 FROM uf_ysmxb
第三步:將資料按要求進行彙總統計
SELECT 年月, SUM(日運輸量) AS 月度發貨量,發貨量型別 FROM ( SELECT yzrq AS 運作日期, DATE_FORMAT( yzrq, '%Y-%m' ) AS 年月, rysl AS 日運輸量, CASE jldw WHEN 34 THEN '重量' ELSE '體積' END AS 發貨量型別 FROM uf_ysmxb UNION ALL SELECT yzrq, DATE_FORMAT( yzrq, '%Y-%m' ) AS 年月, cc AS 日運輸量, '車次' AS 發貨量型別 FROM uf_ysmxb ) AS T GROUP BY 年月,發貨量型別