求高手回答!現在有一個表存有一年里每天的營業額,但是按月分組,現在要求用一個SQ實作,如下:
用的oracle
表結構:
公司code(key) 管理code(key) 部門code 顧客code 日期(格式:YYYYMMDD) 交易額
111 0001 01 V001 20130101 1000
111 0002 01 V001 20130201 20000
111 0003 01 V001 20130212 2000
111 0004 01 V001 20130201 200000
111 0005 01 V001 20130303 3000
111 0006 01 V001 20130305 5000
抽出結果:
一月 二月 三月
record1 1000 20000 3000
record2 空值 2000 5000
record3 空值 200000 空值
注:其實是要查找相同部門相同顧客每月的資料,但每個月的資料條數不一定,也有可能沒有,沒有就用空值……
uj5u.com熱心網友回復:
我用的也是Oracle,如下:SELECT 管理code, 部門code, 顧客code,SUBSTR(日期, 5, 2) MONTH, COUNT(1) CNT FROM TABLE_營業額
WHERE SUBSTR(日期, 1, 4) = '2013'
GROUP BY 管理code, 部門code, 顧客code, SUBSTR(日期, 5, 2);
SELECT 管理code, 部門code, 顧客code,MONTH,
NVL(SUM(DECODE(MONTH, '01', CNT, 0)), 0) AS "一月",
NVL(SUM(DECODE(MONTH, '02', CNT, 0)), 0) AS "二月",
NVL(SUM(DECODE(MONTH, '03', CNT, 0)), 0) AS "三月",
NVL(SUM(DECODE(MONTH, '04', CNT, 0)), 0) AS "四月",
NVL(SUM(DECODE(MONTH, '05', CNT, 0)), 0) AS "五月",
NVL(SUM(DECODE(MONTH, '06', CNT, 0)), 0) AS "六月",
NVL(SUM(DECODE(MONTH, '07', CNT, 0)), 0) AS "七月",
NVL(SUM(DECODE(MONTH, '08', CNT, 0)), 0) AS "八月",
NVL(SUM(DECODE(MONTH, '09', CNT, 0)), 0) AS "九月",
NVL(SUM(DECODE(MONTH, '10', CNT, 0)), 0) AS "十月",
NVL(SUM(DECODE(MONTH, '11', CNT, 0)), 0) AS "十一月",
NVL(SUM(DECODE(MONTH, '12', CNT, 0)), 0) AS "十二月" FROM (
SELECT 管理code, 部門code, 顧客code,SUBSTR(日期, 5, 2) MONTH, COUNT(1) CNT FROM TABLE_營業額
WHERE SUBSTR(日期, 1, 4) = '2013'
GROUP BY 管理code, 部門code, 顧客code, SUBSTR(日期, 5, 2))
GROUP BY 管理code, 部門code, 顧客code,MONTH
uj5u.com熱心網友回復:
實際是一個行列轉換的問題。uj5u.com熱心網友回復:
在SQL上下工夫還不如直接用控制元件查詢到資料集里然后用CxPivotGrid連接資料源設定相關屬性就可以!
uj5u.com熱心網友回復:
oracle資料庫呀, 我還沒有入門呢
uj5u.com熱心網友回復:
怎么能這么說捏,

sql的性能很大一部分是看你的sql陳述句的撰寫優化,不然注定性能低下
uj5u.com熱心網友回復:

其它樓主比錯地方了,應該發在MSSQL
uj5u.com熱心網友回復:
我一般碰到這種情況,就再建立一個表,然后插入資料。例如,建立一個表,列明為1、2、3……12月,然后用sql陳述句吧你需要的資料寫進去,因為你這個是行轉成列,反正我都是這么弄的。不知道有沒有什么好的辦法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/132851.html
標籤:語言基礎/算法/系統設計
上一篇:delphi模式編程
