源数据格式如下:
LGORT   MENGE  DATE
1001    2      20010101
1004    3      20010201
1004    4      20010301
1003    5      20010401
1001    6      20010101
1004    7      20010301
1002    8      20011201如何用sql语句实现如下结果: 
     1月  2月  3月  4月  5月  6月  7月  8月  9月 10月  11月  12月  合计
设备  8                                                             8
材料                                                          8     8 
助剂                 5                                              5
管材       3    11                                                 14
合计   8   3    11   5                                        8    35
要求:
1、判断Lgort:设备(库房编号1001)、材料(库房编号1002)、助剂(库房编号1003)、管材(库房编号1005)、9999(库房编号9999)
2、本月份的sum(menge)
3、判断12个月份,按月统计竖型显示

解决方案 »

  1.   

    用存储过程A,传入参数:库房编号,月份
    然后通过select A(库房编号,'201001'),...from dual,执行
      

  2.   

    select Lgort,
    decode(mon,'01',menge_sum,null) as '1月',
    decode(mon,'02',menge_sum,null) as '2月',
    .......
    decode(mon,'11',menge_sum,null) as '11月',
    decode(mon,'12',menge_sum,null) as '12月'
    from
    (
    select 
    decode(Lgort,1001,'设备',1002,'材料',1003,'助剂',1005,'管材',9999 ,'库房') as Lgort,
    sum(MENGE) as menge_sum,
    substr(DATE,5,2) as mon
    from tab
    group by Lgort,to_number(substr(DATE,5,2))
    )
      

  3.   

    一般来说对于这种行转列的问题如果列固定,如楼主这个,可以使用deocde或case函数直接以一个语句完成
    如果不固定则要使用存储过程动态SQL来处理
      

  4.   

    http://blog.csdn.net/you_tube/archive/2009/04/09/4059251.aspx