首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

越做越复杂的一个sql话语 求大神

2013-10-16 
越做越复杂的一个sql语句 求大神表记录A有字段ID,CLASS,USERNAME,NAME,AMOUNTA表记录IDClassUserNameNameA

越做越复杂的一个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
*/

热点排行