2 fanfan gg fanfan_gg 于 2014.03.11 15:25 提问

求一个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都不能画么

2个回答

qingzhishuishou
qingzhishuishou   2014.03.17 17:50

如果科目中的项非常多的话建议程序中处理,如果不是非常多的话就直接每个类型都列出来

shendixiong
shendixiong   2014.04.03 18:13
select 
    count(*),
    '姓名字段',
    (CASE WHEN  '学科字段'='语文' then '学科分数字段' END) AS '语文' ,
(CASE WHEN  '学科字段'='数学' then '学科分数字段' END) AS '数学' ,
(CASE WHEN  '学科字段'='物理' then '学科分数字段' END) AS '物理' 
from tableName t 
group by '姓名字段';

如果科目不能确定,建议使用存储过程。逻辑上跟我上面给的SQL一样。

记得我表有的“字段“的要正确

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!