之前oracle mysql sqlserver坛子里,都有那种行列倒置的sql场景如下查询结果学号 科目 成绩
001  数学  80
001  语文  90展现成 
学号 数学 语文
001   80   90可以转换成下面这样的吗?
学号 科目1 成绩1 科目2 成绩2
001   数学  80    语文   90 只用纯sql和数据库内置的函数,而不用什么object,过程等。

解决方案 »

  1.   

    一般也是case when判断吧~!ORACLE不知道语法怎么写。
      

  2.   


    select 
        学号,
        ‘数学’,
        case when 科目 =‘数学’ then 成绩 end,
        ‘语文’,
        case when 科目 =‘语文’ then 成绩 end
    from table
    group by 学号
        
      

  3.   

    select 学号 ,
           max(case when px = 1 then 科目 else '') 科目1,
           max(case when px = 1 then 成绩 else 0) 成绩1,
           max(case when px = 2 then 科目 else '') 科目2,
           max(case when px = 2 then 成绩 else 0) 成绩2
    from
    (
      select t.* , row_number() over(partition by 学号 order by 科目) px from tb t
    )m
    group by 学号
      

  4.   

    呵呵,我自己用decode也实现了。谢谢各位。。
      

  5.   


    这个不通用,如果我的科目和成绩有多个,你这样写1,2是不行的。用 mod函数判断也不行。