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

一条sql语句统计多个结果问题
一张表:
 学校    学生姓名   语文   数学   物理   化学  英语
a学校     某某某1   68     78        99      41     100
a学校    某某某2    89     87       12       100   87    
b学校    某某某3    89     87       12       100   87    
b学校    某某某4    89     87       12       100   87    
如何用一条SQL语句统计出这个样子:
学校   语文人均分   语文及格率  语文优生率   数学人均分   数学及格率  数学优生率    物理人均分   物理及格率  物理优生率
a学校
b学校
万分感谢!!!!!!!!!!!!!!!!
------解决方案--------------------
其他的还要写吗?
----------------------------------------------------------------
-- Author  :DBA_HuangZJ(发粪涂墙)
-- Date    :2014-03-12 14:29:22
-- Version:
--      Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 
-- Apr  2 2010 15:48:46 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据[huang]
if object_id('[huang]') is not null drop table [huang]
go 
create table [huang]([学校] nvarchar(6),[学生姓名] nvarchar(8),[语文] int,[数学] int,[物理] int,[化学] int,[英语] int)
insert [huang]
select N'a学校',N'某某某1',68,78,99,41,100 union all
select N'a学校',N'某某某2',89,87,12,100,87 union all
select N'b学校',N'某某某3',89,87,12,100,87 union all
select N'b学校',N'某某某4',89,87,12,100,87
--------------生成数据--------------------------

select [学校],SUM([语文])/(SELECT COUNT([学生姓名]) FROM HUANG A WHERE HUANG.[学校]=A.[学校] GROUP BY [学校]  )语文人均分
from [huang]
GROUP BY [学校]
----------------结果----------------------------
/* 
学校     语文人均分
------ -----------
a学校    78
b学校    89
*/

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


create table test (学校 nvarchar(10),学生姓名 nvarchar(10),语文 int,
数学 int,物理 int,化学 int,英语 int)
insert into test 
select 'a学校','某某某1',68,78,99,41,100 union all
select 'a学校','某某某2',89,87,12,100,87 union all   
select 'b学校','某某某3',89,87,12,100,87 union all   
select 'b学校','某某某4',89,87,12,100,87  

select 学校,
语文人均分=cast(SUM(语文) as float)/COUNT(学生姓名),
语文及格率=convert(varchar,cast(SUM(case when 语文>59 then 1&nbs