问题描述
- 求一个SQL行列转换的解决方案
-
表存储结构如下定义
姓名 ----------科目 ----------分数 ----------预期分数
张三 ----------语文 ------------74 -------------------90
张三 ----------数学 ------------83 -------------------60
张三 ----------物理 ------------93 -------------------78
李四 ----------语文 ------------74 ------------------100
李四 ----------数学 ------------84 -------------------85
李四 ----------物理 ------------94 -------------------60科目中的项是不确定的(不止语文数学物理)
想要得到结果如下姓名----语文----语文预期分数----数学----数学预期分数----物理----物理预期分数
李四------74-----------------100-------84------------------85-------94------------------94
张三------74-------------------90-------83------------------60-------93------------------78顺便说一句 CSDN这文本编辑器连个Table都不能画么
解决方案
如果科目中的项非常多的话建议程序中处理,如果不是非常多的话就直接每个类型都列出来
解决方案二:
select
count(*),
'姓名字段',
(CASE WHEN '学科字段'='语文' then '学科分数字段' END) AS '语文' ,
(CASE WHEN '学科字段'='数学' then '学科分数字段' END) AS '数学' ,
(CASE WHEN '学科字段'='物理' then '学科分数字段' END) AS '物理'
from tableName t
group by '姓名字段';
如果科目不能确定,建议使用存储过程。逻辑上跟我上面给的SQL一样。
记得我表有的“字段“的要正确
时间: 2024-11-03 12:24:30