select a.地区,a.学校名称,count(distinct c.id) as 学生数, sum(case when b.班级卡 is null then 0 else 1 end) 班级卡数, sum(case when b.教师卡 is null then 0 else 1 end) 教师卡数 from 学校表 a join 班级表 b on a.id = b.学校id join 学生表 c on a.id = c.学校id and b.id = c.班级id group by a.地区,a.学校名称
select 地区,学校名称, 学生数量=(select count(1) from 学生 where 学校ID=a.ID), 班级卡数量=(select count(1) from 班级表 where 学校ID=a.ID and 班级卡 is not null), 教师卡数量=(select count(1) from 班级表 where 学校ID=a.ID and 教师卡 is not null) from 学校表 a
select a.地区,a.学校名称,count(distinct c.id) as 学生数, sum(case when b.班级卡 is null then 0 else 1 end) 班级卡数, sum(case when b.教师卡 is null then 0 else 1 end) 教师卡数 from 学校表 a join 班级表 b on a.id = b.学校id join 学生表 c on a.id = c.学校id and b.id = c.班级id group by a.地区,a.学校名称
/*如下几个表: 学校表:(ID , 地区,学校名称) 班级表:(ID , 班级名称 , 学校ID ,班级卡,教师卡 )其中班级卡和教师卡可为Null 学生:(ID ,学生姓名, 班级ID , 学校ID)现在要统计出每个学校的信息,查询结果就像这样:地区 学校名称 学生数量 班级卡数量 教师卡数量 这个Sql语句该怎么写呢? *//*学校*/ declare @school table(id int,area varchar(20),schoolName varchar(20)) /*班级*/ declare @class table(id int,className varchar(20),schoolId int,classCard int,teacherCard int) /*学生*/ declare @student table(id int,studentName varchar(20),classId int,schoolId int)insert into @school select 1,'芙蓉区','OS大学' union all select 2,'岳麓区','AS大学' union all select 3,'天心区','AA大学'insert into @class select 1,'计算1班',1,20,5 union all select 2,'计算2班',1,50,10 union all select 3,'计算3班',2,50,10 union all select 4,'计算1班',3,100,20 union all select 5,'计算1班',2,null,nullinsert into @student select 1,'z一',1,1 union all select 2,'z二',2,2 union all select 3,'z三',3,3 union all select 4,'z三',4,1 union all select 5,'z四',5,2 union all select 6,'z五',1,3 union all select 7,'z六',2,1 union all select 8,'z七',3,2 select area,schoolname,studentnum,classnum,teachernum from( select count(a.id) studentnum, a.schoolid, sum(case when classCard is null then 0 else classCard end) classnum, sum(case when teacherCard is null then 0 else teacherCard end) teachernum from @student a,@class b where a.classid=b.id group by a.schoolid )as c ,@school d where c.schoolid=d.id
select a.地区,a.学校名称,count(distinct c.id) as 学生数,
sum(case when b.班级卡 is null then 0 else 1 end) 班级卡数,
sum(case when b.教师卡 is null then 0 else 1 end) 教师卡数
from 学校表 a join 班级表 b on a.id = b.学校id
join 学生表 c on a.id = c.学校id and b.id = c.班级id
group by a.地区,a.学校名称
select 地区,学校名称,
学生数量=(select count(1) from 学生 where 学校ID=a.ID),
班级卡数量=(select count(1) from 班级表 where 学校ID=a.ID and 班级卡 is not null),
教师卡数量=(select count(1) from 班级表 where 学校ID=a.ID and 教师卡 is not null)
from 学校表 a
a.地区,a.学校名称,count(distinct c.id) as 学生数,
sum(case when b.班级卡 is null then 0 else 1 end) 班级卡数,
sum(case when b.教师卡 is null then 0 else 1 end) 教师卡数
from
学校表 a
join
班级表 b on a.id = b.学校id
join
学生表 c on a.id = c.学校id and b.id = c.班级id
group by
a.地区,a.学校名称
学校表:(ID , 地区,学校名称)
班级表:(ID , 班级名称 , 学校ID ,班级卡,教师卡 )其中班级卡和教师卡可为Null
学生:(ID ,学生姓名, 班级ID , 学校ID)现在要统计出每个学校的信息,查询结果就像这样:地区 学校名称 学生数量 班级卡数量 教师卡数量
这个Sql语句该怎么写呢?
*//*学校*/
declare @school table(id int,area varchar(20),schoolName varchar(20))
/*班级*/
declare @class table(id int,className varchar(20),schoolId int,classCard int,teacherCard int)
/*学生*/
declare @student table(id int,studentName varchar(20),classId int,schoolId int)insert into @school
select 1,'芙蓉区','OS大学'
union all
select 2,'岳麓区','AS大学'
union all
select 3,'天心区','AA大学'insert into @class
select 1,'计算1班',1,20,5
union all
select 2,'计算2班',1,50,10
union all
select 3,'计算3班',2,50,10
union all
select 4,'计算1班',3,100,20
union all
select 5,'计算1班',2,null,nullinsert into @student
select 1,'z一',1,1
union all
select 2,'z二',2,2
union all
select 3,'z三',3,3
union all
select 4,'z三',4,1
union all
select 5,'z四',5,2
union all
select 6,'z五',1,3
union all
select 7,'z六',2,1
union all
select 8,'z七',3,2
select area,schoolname,studentnum,classnum,teachernum
from(
select
count(a.id) studentnum,
a.schoolid,
sum(case when classCard is null then 0 else classCard end) classnum,
sum(case when teacherCard is null then 0 else teacherCard end) teachernum
from @student a,@class b
where a.classid=b.id
group by a.schoolid
)as c ,@school d
where c.schoolid=d.id