有一张表T,可能有如下数据部门     月份     支出类型        支出金额
部门A   1       支出类型1      10.00
部门A   2       支出类型2      20.00
部门B   1       支出类型1      30.00目前希望得到的结果是:                    1月     2月     3月     ……
部门A    支出类型1   20.00  30.00  40.00
部门A    支出类型2   5.00   10.00  15.00
部门A    合计        25.00   40.00  55.00
…………希望各位高人能给小弟一点提示。需求是月份和类型都不固定:如果5月查询则显示前5个月的情况,若10月查询则显示前10个月的情况。支出类型也可以由用户维护,小弟实在不知道该怎么写了,求各位高手帮忙,或者能够告诉小弟支出类型为2种的时候这个SQL该怎么写就行,不胜感激

解决方案 »

  1.   

    参考一下我的blog,纵向记录横向显示的问题:
    http://blog.csdn.net/kinglht
      

  2.   

    WITH A AS (SELECT 'A' DEPTNO,1 YM,'類型1' TYPE,10 MONEY  FROM DUAL
               UNION
               SELECT 'A' DEPTNO,2 YM,'類型2' TYPE,20 MONEY  FROM DUAL
               UNION
               SELECT 'B' DEPTNO,1 YM,'類型1' TYPE,30 MONEY  FROM DUAL
               )
    SELECT DEPTNO,TYPE,MAX(DECODE(RN,1,MONEY,0)),MAX(DECODE(RN,2,MONEY,0))
    FROM (SELECT A.*,ROW_NUMBER()OVER(PARTITION BY DEPTNO ORDER BY DEPTNO,TYPE) RN FROM A)
    GROUP BY grouping SETS ((DEPTNO,TYPE),DEPTNO)  
    ORDER BY DEPTNO
    DEPTNO TYPE  MAX(DECODE(RN,1,MONEY,0)) MAX(DECODE(RN,2,MONEY,0))
    ------ ----- ------------------------- -------------------------
    A      類型1                        10                         0
    A      類型2                         0                        20
    A                                   10                        20
    B      類型1                        30                         0
    B                                   30                         0我已經盡力了,但是還是有遺憾,希望高手指點一二!