日期:2014-05-16  浏览次数:20765 次

在两个表里统计(问题不好描述,请进来看)
A 表
年级
一年级
二年级
三年级
四年级
五年级
六年级

B表
姓名    性别   年级
李明    男     一年级
张杰    男     二年级
赵丽    女     一年级
刘琴    女     一年级
杨刚    男     五年级
周丽    女     六年级

求SQL语句统计得到如下结果:
年级      总人数   男       女
一年级      3            1              2
二年级      1            1              0
三年级      0            0              0
四年级      0            0              0
五年级      1            1              0
六年级      1            0              1


------解决方案--------------------


--drop table a,b

create table A(年级 varchar(20))

insert into A
select '一年级' union all
select '二年级' union all
select '三年级' union all
select '四年级' union all
select '五年级' union all
select '六年级'

create table B(姓名 varchar(10), 性别 varchar(10), 年级 varchar(10))

insert into B
select '李明',    '男'     ,'一年级' union all
select '张杰',    '男'     ,'二年级' union all
select '赵丽',    '女'     ,'一年级' union all
select '刘琴',    '女'     ,'一年级' union all
select '杨刚',    '男'     ,'五年级' union all
select '周丽',    '女'     ,'六年级'
go


select a.年级,
       COUNT(B.姓名) 总人数,
       sum(case when 性别='男' then 1 else 0 end) 男,
       sum(case when 性别='女' then 1 else 0 end) 女
from A
left join B
       on a.年级 = b.年级
group by a.年级
/*
年级 总人数 男 女
二年级 1 1 0
六年级 1 0 1
三年级 0 0 0
四年级 0 0 0
五年级 1 1 0
一年级 3 1 2
*/