日期        大类   出售数量
2010.1.1    apple   10
2010.1.1    egg     20
2010.1.2    apple   15
2010.1.2    egg     30大类    细类
apple   中国apple
apple   美国apple
egg     日本egg
egg     韩国egg
如何转换成:
                apple                   egg 
           中国apple,美国apple     日本egg,韩国egg
2010.1.1         10                     15
2010.1.2         20                     30

解决方案 »

  1.   

    等高手。感觉这有点难为ORACLE了,它毕竟不是纯报表工具,呵呵。
      

  2.   

    研究一下oracle的报表吧!实际上oracle的报表功能也是很强大的 
      

  3.   

    你给点结果就有错吧:应该是这个吧
                   apple                  egg 
              中国apple,美国apple    日本egg,韩国egg 
    2010.1.1        10                    20 
    2010.1.2        15                    30
      

  4.   

    楼上java3344520就对的,应该是
                apple                  egg
              中国apple,美国apple    日本egg,韩国egg
    2010.1.1        10                    20
    2010.1.2        15                    30
      

  5.   

    --如果已知列数,可用如下方式,可用存储过程拼接出类似语句
    SELECT MAX(decode(大类, 'apple', wm_concat(细类))) apple, 
           MAX(decode(大类, 'egg', wm_concat(细类)))) egg
      FROM detail
     GROUP BY 大类
    UNION ALL
    SELECT SUM(decode(大类, 'apple', 数量)) apple, SUM(decode(大类, 'egg', 数量)) egg
      FROM main
     GROUP BY 日期
      

  6.   

    列数不是已知的。另外
                apple                  egg
              中国apple,美国apple    日本egg,韩国egg
    2010.1.1        10                    20
    2010.1.2        15                    30
    中,前两行也是数据来的,第一行是类的名字,第二行是细类的名字,目的是显示这个大类下边包含哪些细类
      

  7.   

    细类显示采用wm_concat,参考5楼,多了一个union all而已。
    列数未知,看wildwave写的:
    行列转换的通用过程 by wildwave
    http://topic.csdn.net/u/20100109/13/6a10c168-f190-4766-b838-adbf03c4ac7b.html?64786
      

  8.   

    可以用case 语句来实现呀.
      

  9.   

    需要自己写个函数,然后在sql语句里调用你的函数