表结构如下:
    id0  userid   subjectid   name   subject   score 
    001   1001      01         张三     语文       85
    002   1001      02         张三     数学       93
    003   1001      03         张三     英语       60
    004   1002      01         李四     语文       75
    005   1002      02         李四     数学       92
    006   1002      03         李四     英语       87要求得到如下结果:
    userid    name   语文  数学  英语   合计  
     1001     张三    85    93   60    248
     1002     李四    75    92   87    254

解决方案 »

  1.   

    我刚刚在写行列转换的例子,这里马上就有提问了,你参考下吧decode最常见的用途,就是做固定列的行列转换
    比如说有数据
    Name  class score
    小明  语文   80
    小强  数学   90
    小明  英语   89
    小强  语文   70
    小明  数学   95
    小强  英语   85要求出来
    姓名   语文  数学  英语
    小明   80    95    89
    小强   70    90    85这时候就以用decode来做
    SELECT   NAME 姓名, SUM (DECODE (CLASS, '语文', score, 0)) 语文,
             SUM (DECODE (CLASS, '数学', score, 0)) 数学,
             SUM (DECODE (CLASS, '英语', score, 0)) 英语
        FROM table
    GROUP BY NAME
      

  2.   

    你的例子
    SELECT   userid,NAME, SUM (DECODE (subject, '语文', score, 0)) 语文, 
             SUM (DECODE (subject, '数学', score, 0)) 数学, 
             SUM (DECODE (subject, '英语', score, 0)) 英语,
             SUM (DECODE (subject, '语文', score, 0))+ SUM (DECODE (subject, '数学', score, 0)) 
             +SUM (DECODE (subject, '英语', score, 0))
        FROM table 
    GROUP BY userid,NAME 
      

  3.   

    select t.userid,
           t.name,
           sum(decode(subject,'语文',t.score,0))语文,
           sum(decode(subject,'数学',t.score,0))数学,
           sum(decode(subject,'英语',t.score,0))英语,
           sum(t.score)合计
     from test1 t group by t.userid,t.name