原表結構如下,我們可以發現,“日運輸量”和“車次”是在同一張表中相互獨立的兩個欄位,即獨立的兩列數據,下麵,我將系統中的測試數據以及代碼全部放出來,以解釋列轉行的操作方法 原表資料庫查詢代碼: 1 SELECT 2 yzrq AS 運作日期, 3 DATE_FORMAT( yzrq, '%Y-%m' ...
原表結構如下,我們可以發現,“日運輸量”和“車次”是在同一張表中相互獨立的兩個欄位,即獨立的兩列數據,下麵,我將系統中的測試數據以及代碼全部放出來,以解釋列轉行的操作方法
原表資料庫查詢代碼:
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 年月,發貨量類型