表A结构如下﹕
模具     月份      数量
A       200601      100
A       200604      100
A       200605      100
B       200601      100
C       200602      100
B       200604      100
D       200605      100
A       200602      100
E       200605      100          ………
可不可以用查询语句转成如下格式:
模具    200601    200602   200604  200605 ……..    合计
A        100        100     100      100            400
B        100                100                     200
C                   100                             100
D                                   100             100
E                                    100            100 谢谢!!!!数据库 oracle8i

解决方案 »

  1.   

    应该可以的,就是表的转置,用DECODE()函数解决,具体我看一下回复
      

  2.   

    select 模具,
       sum(decode(月份,'200601',数量,0)) 200601,
       sum(decode(月份,'200602',数量,0)) 200602,
       sum(decode(月份,'200603',数量,0)) 200603,
       sum(decode(月份,'200604',数量,0)) 200604,
       sum(decode(月份,'200605',数量,0)) 200605,
       sum(decode(月份,'200606',数量,0)) 200606,
       sum(decode(月份,'200607',数量,0)) 200607,
    .
    .
    .
    (200601+200602+...+200607+..) 合计
    from A
    GROUP BY 模具;
      

  3.   

    select 模具,
       sum(decode(月份,'200601',数量,0)) 200601,
       sum(decode(月份,'200602',数量,0)) 200602,
       sum(decode(月份,'200603',数量,0)) 200603,
       sum(decode(月份,'200604',数量,0)) 200604,
       sum(decode(月份,'200605',数量,0)) 200605,
       sum(decode(月份,'200606',数量,0)) 200606,
       sum(decode(月份,'200607',数量,0)) 200607,
    .
    .
    .,
    sum(数量) 合计
    from A
    GROUP BY 模具;
      

  4.   

    可以借助动态SQL语句拼一个查询的字符串。
      

  5.   

    這樣的寫死的話﹐如果換成2007年﹐2008年﹐都要改寫sql,太麻煩了
      

  6.   

    那样只能借助动态SQL语句拼一个查询的字符串通过编程处理了,或用功能较强的报表控件处理,比如PB的交叉报表就可以,不知你是只是查询还是作报表?
      

  7.   

    写个函数,返回要执行的sql.sql里面就是循环使用decode过程。
      

  8.   

    select 模具,
       sum(decode(月份,'200601',数量,0)) 200601,
       sum(decode(月份,'200602',数量,0)) 200602,
       sum(decode(月份,'200603',数量,0)) 200603,
       sum(decode(月份,'200604',数量,0)) 200604,
       sum(decode(月份,'200605',数量,0)) 200605,
       sum(decode(月份,'200606',数量,0)) 200606,
       sum(decode(月份,'200607',数量,0)) 200607,
    .
    .
    .
    (200601+200602+...+200607+..) 合计
    from A
    GROUP BY 模具;