gpt4 book ai didi

mysql - 我的 Sql 数据输出将行转换为列,如数据透视表

转载 作者:行者123 更新时间:2023-11-29 02:47:13 25 4
gpt4 key购买 nike

我有一个名为 marks 的表。下面给出了我表中的样本数据。在我的表中,主题字段是动态的,主题的名称和数量可能因类(class)而异。

  ID        Name        Subject     Marks
------ --------- ---------- ---------
1001 John Maths 78
1001 John English 88
1001 John Computer 92
1002 Mary Maths 81
1002 Mary English 85
1002 Mary Computer 90

我怎样才能以下面的格式输出上面的表格数据。我不知道这是否是一个简单的问题,我是 SQL 和开发领域的初学者。请帮忙。

ID    Name         Maths        English    Computer
---- -------- --------- --------- ------------
1001 John 78 88 92
1002 Mary 81 85 90

最佳答案

一个更简单的解决方案是像这样使用条件聚合

Select id,name,
sum(case when s.SUBJECT='Computer' then s.marks else 0 end) as Computer,
sum(case when s.SUBJECT='English' then s.marks else 0 end) as English,
sum(case when s.SUBJECT='Maths' then s.marks else 0 end) as Maths
from marks s group by id,name;

如果您不知道有多少个主题,那么您必须创建一个 sql 语句并运行它(动态 sql)。我分阶段进行所以

set @sumstr = 
(select str from
(
select @rn:=@rn + 1 rn,@str:=concat(@str,'sum(case when s.SUBJECT=',char(39),s.SUBJECT,char(39),' then s.marks else 0 end) as ', s.SUBJECT, ',' ) str
from (select @rn:=0,@str:='') str,(SELECT DISTINCT SUBJECT FROM MARKS) s
ORDER BY S.SUBJECT
) s
order by rn desc limit 1
);

创建 sum 语句,然后我像这样丰富

SET @SQLSTR = concat(
'Select id,name,'
,SUBSTRING(@SUMSTR,1,LENGTH(@SUMSTR) -1)
,' from marks s group by id,name;'
)
;

在此解决方案的顶部创建 sql 语句。然后我准备并执行它

prepare dynamic_statement from @sqlstr;
execute dynamic_statement;

关于mysql - 我的 Sql 数据输出将行转换为列,如数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40486945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com