求高手回答!现在有一个表存有一年里每天的营业额,但是按月分组,现在要求用一个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 空值
注:其实是要查找相同部门相同顾客每月的数据,但每个月的数据条数不一定,也有可能没有,没有就用空值……
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 空值
注:其实是要查找相同部门相同顾客每月的数据,但每个月的数据条数不一定,也有可能没有,没有就用空值……
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
查询到数据集里然后用CxPivotGrid连接数据源设置相关属性就可以!
sql的性能很大一部分是看你的sql语句的编写优化,不然注定性能低下
其它楼主比错地方了,应该发在MSSQL
然后用sql语句吧你需要的数据写进去,因为你这个是行转成列,反正我都是这么弄的。不知道有没有什么好的办法。