SQL 合并查询 把列数据转为行

时间:2023-01-11 19:21:18

表:

姓名  语文    数学     英语

张三    75    90       85
李四    80     85       85


查询结果

姓名    成绩    科目

张三    90      数学
李四    85      数学,英语

 

 

select  *  into CJ
from(
select  ' 张三 '  as 姓名, 75  as 语文, 90  as 数学, 85  as 英语
union
select  ' 李四 '  as 姓名, 80  as 语文, 85  as 数学, 85  as 英语
) a
-- --------------
select 姓名, max(成绩)  as 成绩,
 ( select  case  when 语文 = MAX(成绩)  then  ' 语文, '  else  ''  end +
          case  when 数学 = MAX(成绩)  then  ' 数学, '  else  ''  end +
          case  when 英语 = MAX(成绩)  then  ' 英语 '  else  ''  end
  from CJ ab  where ab.姓名 =a.姓名)  as 科目
from
(
select 姓名,语文  as 成绩, ' 语文 ' 科目
from CJ
union  all
select 姓名,数学  as 成绩, ' 数学 ' 科目
from CJ
union  all
select 姓名,英语  as 成绩, ' 英语 ' 科目
from CJ
) a  group  by a.姓名