请教个问题:
现在有一张举行活动的表:
name   total  sex  grade
------------------------
活动一  3     男    1
活动一  2     男    2
活动一  1     女    2我想得到这样的格式要怎么写?
name   grade为1的男生  grade为1的女生  grade为2的男生  grade为2的女生
---------------------------------------------------------------------
活动一    3                0                  2            1谢谢先~~

解决方案 »

  1.   

    select name,
           max(decode(sex||grade,'男1',total,0)),max(decode(sex||grade,'女1',total,0)),
           max(decode(sex||grade,'男2',total,0)),max(decode(sex||grade,'女2',total,0))
      from table
     group by name
      

  2.   


    select name,sum(case when grade=1 and sex='男' then total end) grade为1的男生,
    sum(case when grade=1 and sex='女' then total end) grade为1的女生,
    sum(case when grade=2 and sex='男' then total end) grade为2的男生,
    sum(case when grade=2 and sex='女' then total end) grade为2的女生
    from tb
    group by name
      

  3.   

    楼主估计是统计的人数 得把max 改成sum
      

  4.   

    只是简单的行列转换,如果改成sum也没有错,应该更完整
      

  5.   

    ORACLE 的语法怎么号MSSQL的差这么远,我只看懂了3楼的
      

  6.   

    sex||grade
    是什么意思?注:我这里想得到的是人数
      

  7.   

    decode(sex||grade,'男1',total,0)的意思是不是:
    sex和grade拼起来,如果等于'男1',就返回total的值,如果不是,就返回0,是不是这样理解?
      

  8.   

    SQL> select * from ttt;
     
    NAME       TOTAL SEX GRADE
    ---------- ----- --- -----
    活动一         3 男      1
    活动一         2 男      2
    活动一         1 女      2
     
    SQL> 
    SQL> select name,sum(case when grade=1 and sex='男' then total end) grade为1的男生,
      2  sum(case when grade=1 and sex='女' then total end) grade为1的女生,
      3  sum(case when grade=2 and sex='男' then total end) grade为2的男生,
      4  sum(case when grade=2 and sex='女' then total end) grade为2的女生
      5  from ttt
      6  group by name;
     
    NAME           GRADE为1的男生     GRADE为1的女生     GRADE为2的男生     GRADE为2的女生
    ---------- -------------- -------------- -------------- --------------
    活动一                  3                             2              1
     
    SQL> 
    SQL> select name,
      2    max(decode(sex||grade,'男1',total,0)),max(decode(sex||grade,'女1',total,0)),
      3    max(decode(sex||grade,'男2',total,0)),max(decode(sex||grade,'女2',total,0))
      4    from ttt
      5   group by name;
     
    NAME        MAX(DECODE(SEX||GRADE,'男1',TO  MAX(DECODE(SEX||GRADE,'女1',TO  MAX(DECODE(SEX||GRADE,'男2',TO  MAX(DECODE(SEX||GRADE,'女2',TO
    ---------- ------------------------------ ------------------------------ ------------------------------ ------------------------------
    活动一                                  3                              0                              2                              1
     
    SQL> 
      

  9.   

    楼主的意思还是统计某个活动男女的人数 不是编号吧  所以用max就有问题的
      

  10.   

    一样了.看下group by前的基表就知道了.
    SQL> select name,case when grade=1 and sex='男' then total end grade为1的男生,
      2              case when grade=1 and sex='女' then total end grade为1的女生,
      3              case when grade=2 and sex='男' then total end grade为2的男生,
      4              case when grade=2 and sex='女' then total end grade为2的女生
      5      from ttt
      6  ;
     
    NAME           GRADE为1的男生     GRADE为1的女生     GRADE为2的男生     GRADE为2的女生
    ---------- -------------- -------------- -------------- --------------
    活动一                  3                               
    活动一                                                2 
    活动一                                                               1
     
    SQL> 
      

  11.   

    这里用sum和max没区别的.很基础的行转列啊.
      

  12.   

    max 是最大值 sum 是求和  你多插入几个就知道了  楼主给出的数据只是恰好
      

  13.   

    不过如果有多条,确实是需要用sum