本帖最后由 feiniaon 于 2011-11-28 14:56:49 编辑

解决方案 »

  1.   


    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.学校名称
      

  2.   


    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
      

  3.   

    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.学校名称
      

  4.   

    /*如下几个表:
    学校表:(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