日期:2014-05-18 浏览次数:20444 次
create table province ( id int, name nvarchar(50) ) insert into province select 1, '北京' union all select 2, '上海' union all select 3, '广东' create table student ( id int, name nvarchar(50), provinceId int ) insert into student select 1, '张三', 1 union all select 2, '李四', 1 union all select 3, '王二', 2 union all select 4, '麻子', 2 union all select 5, '赵五', 2 create table teacher ( id int, name nvarchar(50), provinceId int ) insert into teacher select 1, '语文老师', 1 union all select 2, '数学老师', 2 union all select 3, '英语老师', 3 union all select 4, '地理 老师', 3 create table score ( studentId int, score int ) insert into score select 1, 80 union all select 2, 50 union all select 3, 200 --期望得到 --id name student teacher totalScore --1 北京 2 1 130 --2 上海 3 1 200 --3 广东 0 2 0
select a.id,a.name,count(distinct b.name) as student, count(distinct c.name) as teacher,isnull(sum(score),0) as totalScore from province a left join student b on a.id=b.provinceid left join teacher c on a.id=c.provinceid left join score d on b.id=d.studentid group by a.id,a.name order by a.id /** id name student teacher totalScore ----------- -------------------------------------------------- ----------- ----------- ----------- 1 北京 2 1 130 2 上海 3 1 200 3 广东 0 2 0 (3 行受影响) **/
------解决方案--------------------
---测试数据 创建表province create table province ( id int, name nvarchar(50) ) ---向province插入记录 insert into province select 1, '北京' union