有课程表kc
id,name
1,语文
2,数学
3,英语
有学生表stu
id,name
1,张三
2,李四
3,王五
有成绩表
kid,sid,cj
1,1,90
2,1,80
如何得到以下结果
,张三,李四,王五
语文 90, 0, 0
数学 ,80, 0, 0
英语, 0, 0, 0
------解决思路----------------------
with kc(kid,kname) as
(
select 1,'语文' union all
select 2,'数学' union all
select 3,'英语'
),
stu(sid,sname) as
(
select 1,'张三' union all
select 2,'李四' union all
select 3,'王五'
),
cj(kid,sid,cj) as
(
SELECT 1,1,90 UNION ALL
SELECT 2,1,80
),
tb as
(
select b.kname,c.sname,a.cj from kc b
left join cj a on a.kid=b.kid
left join stu c on c.sid=a.sid
)
select kname,
sum(case when sname='张三' then cj else 0 end)'张三',
sum(case when sname='李四' then cj else 0 end)'李四',
sum(case when sname='王五' then cj else 0 end)'王五'
from tb group by kname
------解决思路----------------------
額。。。 你打算將几千个学生,都横着排?
那怎么看?
我不知道你要这么设计表的目的是啥了。
个人觉得,学生名字竖排, 科目横排会比较好看点。
毕竟,我们浏览习惯是竖着滚动的多。
------解决思路----------------------
+1,学生横排看起来怪怪的,非要横排的话就用动态生成的吧