比如我有一个选课表里面有三个字段name course score
比如这个表里有如下数据
name course score
张三  语文   89
张三  数学   87
张三  英语   86
李四  语文   75
李四  数学   82
怎么用一条sql语句返回这样一个结果呢?
name 语文 数学  英语
张三  89   87    86
李四  75   null  82

解决方案 »

  1.   

    SELECT name,
    MAX(DECODE(COURSE,'语文',score,0)) as 语文,
    MAX(DECODE(COURSE,'语文',score,0)) as 数学,
    MAX(DECODE(COURSE,'语文',score,0)) as 英语
    from sc
    group by name
      

  2.   

    SELECT name,
    MAX(DECODE(COURSE,'语文',score,0)) as 语文,
    MAX(DECODE(COURSE,'数学',score,0)) as 数学,
    MAX(DECODE(COURSE,'英语',score,0)) as 英语
    from sc
    group by name
    这个试试....
      

  3.   


    with tmp as
    (
    select '张三' name, '语文' course, 89 score from dual
    union all
    select '张三' name, '数学' course, 87 score from dual
    union all
    select '张三' name, '英语' course, 86 score from dual
    union all
    select '李四' name, '语文' course, 75 score from dual
    union all
    select '李四' name, '数学' course, 82 score from dual
    )
    select name, max(yw) "语文", max(sx) "数学", max(yy) "英语"
    from (
    select name,
    decode(course, '语文', score, null) yw,
    decode(course, '数学', score, null) sx,
    decode(course, '英语', score, null) yy
    from tmp
    )
    group by name;NAME            语文         数学         英语
    --------- ---------- ---------- ----------
    张三                89         87         86
    李四                75         82  
      

  4.   

    -- 也可以
    select name,
    max(case when course='语文' then score else 0 end),
    max(case when course='数学' then score else 0 end),
    max(case when course='英语' then score else 0 end)
    from sc
    group by name;