create table tab (
counter varchar(20),         -- 参加考试人数
subject varchar(20),         -- 科目
class varchar(20)          -- 班级
)表数据:counter   subject   class
36        英语      一班      
44        英语      二班
44        数学      二班
33        语文      一班
39        语文      三班转换后:       一班   二班   三班
英语   36     44     0
数学   0      44     0     
语文   33     0      39

解决方案 »

  1.   

    select subject,sum(decode(class,'一班',counter,0)) '一班',.... from t group by subject;
      

  2.   

    select subject, sum(decode(class, '一班', 0, counter)) "一班", sum(decode(class, '二班', 0, counter)) "二班", sum(decode(class, '三班', 0, counter)) “三班” from tab group by subject
      

  3.   

    呵呵不好意思, 按vc555的。我这里写错了
    应该是decode(class, '一班', counter, 0)  而不是 decode(class, '一班', 0, counter)
    嘻嘻。
      

  4.   

    select subject,
      max(decode(class,'一班',counter,0))一班,
      max(decode(class,'二班',counter,0))二班,
      max(decode(class,'三班',counter,0))三班
    from tab
    group by subject
      

  5.   

    SQL SERVER:
    select subject,
      MAX(case class when  '一班' THEN  counter ELSE 0 END ) AS  '一班',
      MAX(case class when  '二班' THEN  counter ELSE 0 END ) AS  '二班',
      MAX(case class when  '三班' THEN  counter ELSE 0 END ) AS  '三班'from tab  Group by subjectORACLE:
     select subject, 
       sum(decode(class, '一班',  counter,0)) "一班", 
       sum(decode(class, '二班', counter,0)) "二班", 
       sum(decode(class, '三班', counter,0)) "三班" 
     from tab group by subject