做一个宿舍卫生分数统计系统!
表如下:
宿舍号            系别            卫生分数
101              计算机系            20
102              计算机系            30
201              土木系              20
202              环工系              30
203              土木系              10
301              计算机系            20
如何实现这个功能:
统计出计算机系有有多少个宿舍,统计出计算机系宿舍所得卫生总分和平均分!
要用存储过程实现!

解决方案 »

  1.   

    create proc sp_Test (@系别 varchar(100)) 
    asselect 系别,sum(卫生分数) AS 总分,avg(卫生分数) as 平均分
    from 表名
    where 系别=@系别
    group by 系别
    go--调用
    exec sp_test '计算机系'
      

  2.   

    create proc sp_Test (@系别 varchar(100)) 
    asselect 系别,count(*) AS 宿舍个数,sum(卫生分数) AS 总分,avg(卫生分数) as 平均分
    from 表名
    where 系别=@系别
    group by 系别
    go--调用
    exec sp_test '计算机系'
      

  3.   

    --create test environment
    create table #(宿舍号 varchar(3),系别 nvarchar(10),卫生分数 int)
    insert into #
    select '101',              '计算机系',            20 union all
    select '102',              '计算机系',            30 union all
    select '201',              '土木系',              20 union all
    select '202',              '环工系',              30 union all
    select '203',              '土木系',              10 union all
    select '301',              '计算机系',            20
    go--create stored procedure
    create proc p1(@Department nvarchar(10))
    as
    select count(9) 宿舍数,sum(卫生分数) 卫生总分,avg(卫生分数) 平均分 from # 
    where 系别=@Department
    go--execute stored procedure
    p1 '计算机系'
      

  4.   

    补充一下,如何不用参数把所有的系都统计出来!
    ------------------------------------------create proc p2
    as
    select 系别,count(9) 宿舍数,sum(卫生分数) 卫生总分,avg(卫生分数) 平均分 from # 
    group by 系别
    go
      

  5.   

    --不用参数create proc sp_Test 
    asselect 系别,count(*) AS 宿舍个数,sum(卫生分数) AS 总分,avg(卫生分数) as 平均分
    from 表名
    where 系别='计算机系'
    group by 系别
    go--调用
    exec sp_test
      

  6.   

    --生成测试环境
    if exists (select name from sysobjects where name='TAB' and xtype='U')
    drop table TAB
    go
    create  table TAB (宿舍号 varchar(3),系别 varchar(20),卫生分数 int)
    insert into TAB
    select '101'       ,       '计算机系',            20 union all
    select '102'       ,       '计算机系',            30 union all
    select '201'        ,      '土木系',              20 union all
    select '202 '        ,     '环工系' ,             30 union all
    select '203',              '土木系' ,             10 union all
    select '301',              '计算机系',            20
    --查看测试数据
    select * from TAB
    --创建存储过程
    if exists (select name from sysobjects where name='p_TAB' and xtype='p')
    drop proc p_TAB
    go
    create proc p_TAB
    as
    select count(1) as a,sum(卫生分数) as b,avg(卫生分数) as c from TAB
    where 系别='计算机系'exec p_TAB
    /*结果
    a           b           c           
    ----------- ----------- ----------- 
    3           70          23(所影响的行数为 1 行)
    */
      

  7.   

    --不用参数,所有的系create proc sp_Test 
    asselect 系别,count(*) AS 宿舍个数,sum(卫生分数) AS 总分,avg(卫生分数) as 平均分
    from 表名
    group by 系别
    go--调用
    exec sp_test