求高手回答!现在有一个表存有一年里每天的营业额,但是按月分组,现在要求用一个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   空值 
注:其实是要查找相同部门相同顾客每月的数据,但每个月的数据条数不一定,也有可能没有,没有就用空值……

解决方案 »

  1.   

    我用的也是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
      

  2.   

    在SQL上下工夫还不如直接用控件
    查询到数据集里然后用CxPivotGrid连接数据源设置相关属性就可以!
      

  3.   

    oracle数据库呀, 我还没有入门呢
      

  4.   

    怎么能这么说捏, 
    sql的性能很大一部分是看你的sql语句的编写优化,不然注定性能低下
      

  5.   


    其它楼主比错地方了,应该发在MSSQL
      

  6.   

    我一般碰到这种情况,就再建立一个表,然后插入数据。例如,建立一个表,列明为1、2、3……12月,
    然后用sql语句吧你需要的数据写进去,因为你这个是行转成列,反正我都是这么弄的。不知道有没有什么好的办法。