越做越复杂的一个sql语句 求大神
表记录A有字段ID,CLASS,USERNAME,NAME,AMOUNT
A表记录
ID Class UserName Name Amount
1 一班 张三 数学 90
2 一班 张三 语文 89
3 一班 李四 数学 26
4 一班 李四 语文 31
5 二班 王五 数学 90
6 二班 王五 语文 80
7 二班 钟伟 数学 70
写出一个统计语句(mssql),统计一,二班的考试总人数,语文考试人数,总分
最终结果
班级 总分 考试总人数 语文参考人数
一班 236 2 2
二班 240 2 1
做到考试总人数 和 语文参考人数做不下去了。。
[解决办法]
----------------------------
-- Author :DBA_Huangzj(發糞塗牆)
-- Date :2013-10-15 21:53:58
-- Version:
-- Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64)
--Dec 28 2012 20:23:12
--Copyright (c) Microsoft Corporation
--Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------
--> 测试数据:[A]
if object_id('[A]') is not null drop table [A]
go
create table [A]([ID] int,[Class] varchar(4),[UserName] varchar(4),[Name] varchar(4),[Amount] int)
insert [A]
select 1,'一班','张三','数学',90 union all
select 2,'一班','张三','语文',89 union all
select 3,'一班','李四','数学',26 union all
select 4,'一班','李四','语文',31 union all
select 5,'二班','王五','数学',90 union all
select 6,'二班','王五','语文',80 union all
select 7,'二班','钟伟','数学',70
--------------开始查询--------------------------
select class,COUNT(DISTINCT username),SUM(amount),
(SELECT COUNT(b.name) FROM a b WHERE a.class=b.class AND b.NAME='语文' GROUP BY class)
from [A]
GROUP BY class
----------------结果----------------------------
/*
class
----- ----------- ----------- -----------
二班 2 240 1
一班 2 236 2
*/
create table #tb([ID] int,[Class] varchar(4),[UserName] varchar(4),[Name] varchar(4),[Amount] int)
insert into #tb
select 1,'一班','张三','数学',90 union all
select 2,'一班','张三','语文',89 union all
select 3,'一班','李四','数学',26 union all
select 4,'一班','李四','语文',31 union all
select 5,'二班','王五','数学',90 union all
select 6,'二班','王五','语文',80 union all
select 7,'二班','钟伟','数学',70
select class as 班级, sum(Amount) as 总分,COUNT(DISTINCT username) as 考试总人数,
SUM(case when Name='语文' then 1 else 0 end) as 语文参考人数
from #tb
group by class
drop table #tb
/*
班级 总分 考试总人数 语文参考人数
------------------------------------------
二班24021
一班23622
*/