之前oracle mysql sqlserver坛子里,都有那种行列倒置的sql场景如下查询结果学号 科目 成绩
001 数学 80
001 语文 90展现成
学号 数学 语文
001 80 90可以转换成下面这样的吗?
学号 科目1 成绩1 科目2 成绩2
001 数学 80 语文 90 只用纯sql和数据库内置的函数,而不用什么object,过程等。
001 数学 80
001 语文 90展现成
学号 数学 语文
001 80 90可以转换成下面这样的吗?
学号 科目1 成绩1 科目2 成绩2
001 数学 80 语文 90 只用纯sql和数据库内置的函数,而不用什么object,过程等。
select
学号,
‘数学’,
case when 科目 =‘数学’ then 成绩 end,
‘语文’,
case when 科目 =‘语文’ then 成绩 end
from table
group by 学号
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 学号
这个不通用,如果我的科目和成绩有多个,你这样写1,2是不行的。用 mod函数判断也不行。