请教高手!!下面的如何实现?
表为Test
Amount  Unit
1        A
2        B
5        A
3        C
7        D
想要的结果为:
A   B   C  D ......
6   2   3  7
说明:Unit字段的值不确定,可能有很多

解决方案 »

  1.   

    SELECT sum(decode(unit,'A',amount,0)) A,
           sum(decode(unit,'B',amount,0)) B,
           sum(decode(unit,'C',amount,0)) C,
           sum(decode(unit,'D',amount,0)) D,
           sum(decode(unit,'E',amount,0)) E,
           sum(decode(unit,'F',amount,0)) F,
          ....
      FROM TEST;
           
      

  2.   

    Unit字段的值不确定,楼上的这样写应该不能实现吧!
      

  3.   


    你的结果跟你的测试数据很难有什么明显的规则,反正我只看出了行列转换,但是又不太像啊。Unit字段是列变成行,但是Amount字段呢,不知道怎么变了,楼主你要给个提示吧!
      

  4.   

    Unit为A的,统计Amount字段的sum和
        为B的统计Amount字段的和
          .
          .
          .
          .
      

  5.   

    SELECT unit,sum(Amount)
      FROM TEST group by unit; 
      

  6.   

    其实就是统计结果纵表转横表
    select wm_concat(aaa.val) as resutls from (select unit,sum(amount) as val from test group by unit order by unit) aaa;
    results会按A,B,C,D...的顺序列出6,2,3,7...中间用逗号分隔拿到数据自己再处理下
    但觉得真的没必要,你已经可以拿到纵表了,稍微处理下就行了。
    你如果想拿到和你要求一样的结果,可以用动态sql但感觉没必要。
      

  7.   

    不确定的话,就用动态的SQL来实现!网上行转列的例子太多了
      

  8.   

    首先这应该不是行转列。
    按照你的意思,如果按照Unit分组(group by)的话,查询结果的行数会与你字母的种类数一样,应该是不能只返回一行"总数"的,另外你的Unit还不确定,这也没办法用case语句或者是
    自己重建一张临时表插入数据,感觉这样要求好像做不出来.
    等待高手解答.....