日期:2014-05-19  浏览次数:20581 次

一个高难度的SQL,谁要是写出来了我把我所有的分都给他!!
create   table   学生表
(
        姓名
        所属班级
        及格与否      
)
现在往数据库增加多条学生信息,我要查出某个班级及格的有多少人。
  但现在问题是,要是这个班没有一个及格的。我要得到下面的结构。
 
-----------
|   班级   |   数量   |   及格与否
-----------
|   1班     |     0       |     及格
-----------
|   1班     |     20     |     不及格

  怎么搞。


------解决方案--------------------
SELECT 班级,数量 = COUNT(1),及格与否 = '及格 ' FROM yTABLE WHERE [及格判断条件]
GROUP BY 班级
UNION ALL
SELECT 班级,数量 = COUNT(1),及格与否 = '不及格 ' FROM yTABLE WHERE [不及格判断条件]
GROUP BY 班级
ORDER BY 班级,及格与否

------解决方案--------------------
同意楼上,看来我这一贴是白顶了
------解决方案--------------------
create table 学生表
(
姓名 varchar(10),
所属班级 smallint,
及格与否 varchar(10)
)

insert into 学生表
select 'aa ',1, '及格 '
union all
select 'bb ',2, '不及格 '
union all
select 'cc ',1, '不及格 '
union all
select 'dd ',3, '及格 '

--select * from 学生表

select 所属班级,sum(case 及格与否 when '及格 ' then 1 else 0 end) as 数量, '及格 ' as 及格与否
from 学生表
group by 所属班级
union all
select 所属班级,sum(case 及格与否 when '不及格 ' then 1 else 0 end) as 数量, '不及格 ' as 及格与否
from 学生表
group by 所属班级
order by 所属班级

drop table 学生表
------解决方案--------------------
--分别求出班级中的及格和不及格人数,然后再Union all

select 班级, count(*) as 数量, '及格 ' as 及格与否
from 学生表
where 及格与否= '是 '
group by 班级

union all

select 班级, count(*) as 数量, '不及格 ' as 及格与否
from 学生表
where 及格与否= '否 '
group by 班级

------解决方案--------------------
if object_id( 'pubs..tb ') is not null
drop table tb
go

create table tb(姓名 varchar(10),所属班级 varchar(10),及格与否 varchar(10))
insert into tb(姓名,所属班级,及格与否) values( 'A ', '1班 ', '不及格 ')
insert into tb(姓名,所属班级,及格与否) values( 'A ', '1班 ', '不及格 ')
insert into tb(姓名,所属班级,及格与否) values( 'A ', '1班 ', '不及格 ')
insert into tb(姓名,所属班级,及格与否) values( 'A ', '1班 ', '不及格 ')
insert into tb(姓名,所属班级,及格与否) values( 'A ', '1班 ', '不及格 ')
insert into tb(姓名,所属班级,及格与否) values( 'A ', '1班 ', '不及格 ')
insert into tb(姓名,所属班级,及格与否) values( 'A ', '1班 ', '不及格 ')
insert into tb(姓名,所属班级,及格与否) values( 'A ', '1班 ', '不及格 ')
insert into tb(姓名,所属班级,及格与否) values( 'A ', '1班 ', '不及格 ')
insert into tb(姓名,所属班级,及格与否) values( 'A ', '1班 ', '不及格 ')
insert into tb(姓名,所属班级,及格与否) values( 'A ', '1班 ', '不及格 ')
insert into tb(姓名,所属班级,及格与否) values( 'A ', '1班 ', '不及格 ')
insert into tb(姓名,所属班级,及格与否) values( 'A ', '1班 ', '不及格 ')
insert into tb(姓名,所属班级,及格与否) values( 'A ', '1班 ', '不及格 ')
insert into tb(姓名,所属班级,及格与否) values( 'A ', '1班 ', '不及格 ')
insert into tb(姓名,所属班级,及格与否) values( 'A ', '1班 ', '不及格 ')