有这样一个表
Student(学号,班级号,工作状态)学号--sno,班级号--cno,工作状态--state想统计每个班级的就业比例,比如说表中有内容:
学号,           班级号,  工作状态
20050101 0001 是
20050102 0001 是
20050103 0001 否
20050104 0002 是
20050105 0002 是
20050106 0002 是
20050107 0002 否表中0001班级有3个同学,2个已经工作
0002班级中有4个同学,3个已经工作我想实现获取每个班级的就业率
即 0001班 为2/3
  0002班 为3/4这样用sql怎么实现?
单纯用sql好像不行,好像需要用到存储过程,通过流程控制来实现,
由于存储过程那些语言控制我不太会,特来请教各位,谢谢!问题解决马上给分,分数不多了,只有100多点了,就给100吧!先谢谢了!

解决方案 »

  1.   

    一个语句可以实现select 班级号,1.0*sum(case 工作状态 when '是' then 1 else 0 end)/count(*) as 就业率
    from Student(
    group by 班级号
      

  2.   

    select 班级号,sum(case when 工作状态='是' then 1 else 0 end)*1.0/count(*)  from Student group by 班级号
      

  3.   

    declare @T table([学号] varchar(8),[班级号] nvarchar(4),[工作状态] nvarchar(1))
    Insert @T
    select '20050101',N'0001',N'是' union all
    select '20050102',N'0001',N'是' union all
    select '20050103',N'0001',N'否' union all
    select '20050104',N'0002',N'是' union all
    select '20050105',N'0002',N'是' union all
    select '20050106',N'0002',N'是' union all
    select '20050107',N'0002',N'否'
     
    Select [班级号],ltrim(str(count(case when [工作状态]='是' then 1 end)*1.0/count(*)*100,18,3))+'%' as 百分比
    from @T 
    group by [班级号]班级号  百分比
    ---- -------------------
    0001 66.667%
    0002 75.000%
    (2 個資料列受到影響)
      

  4.   


    declare @class table(学号 varchar(50),班级号 varchar(50),工作状态 varchar(50))
    insert into @class select '20050101','0001','是'
    insert into @class select '20050101','0001','是'
    insert into @class select '20050101','0001','否'
    insert into @class select '20050101','0002','是'
    insert into @class select '20050101','0002','是'
    insert into @class select '20050101','0002','是'
    insert into @class select '20050101','0002','否'
    select 班级号,ltrim(cast(sum(case when 工作状态='是' then 1 else 0 end)*100.0/count(1) as decimal(18,2)))+'%' as '就业率'
    from @class
    group by 班级号
    0001 66.67%
    0002 75.00%
      

  5.   

    declare @t table(xh varchar(10),bj varchar(5),status varchar(2))
    insert @t select '20050101'   , '0001',    '是'
    insert @t select '20050102'   , '0001',    '是'
    insert @t select '20050103'   , '0001',    '否'
    insert @t select '20050104'   , '0002',    '是'
    insert @t select '20050105'   , '0002',    '是'
    insert @t select '20050106'   , '0002',    '是'
    insert @t select '20050107'   , '0002',    '否'
    select bj,cast(cast(sum(case  when status='是'then 1 else 0 end )*1.0/sum(case  when status='否'then 1 else 0 end )as int)as varchar(10))+'/'+cast(count(bj)as varchar(10)) from @t group by bj
    bj    
    ----- ---------------------
    0001  2/3
    0002  3/4
      

  6.   

    看来楼主是个新手哈:
    主要就是要用到case语句就可以了,可以去看下case语句的相关知识
    select 班级号,1.0*sum(case 工作状态 when '是' then 1 else 0 end)/count(*) as 就业率
    from Student
    group by 班级号
      

  7.   

    if object_id('tb') is not null
       drop table tb
    go
    create table tb(sno varchar(10),cno varchar(10),state varchar(10))
    go
    insert into tb
    select '20050101','0001','是' union all
    select '20050102','0001','是' union all
    select '20050103','0001','否' union all
    select '20050104','0002','是' union all
    select '20050105','0002','是' union all
    select '20050106','0002','是' union all
    select '20050106','0002','否'
    go
    select * from tbselect cno,cast(cast(sum(case when state='是' then 1 else 0 end)/cast(count(*) as numeric)*100 as numeric(10,2)) as varchar)+'%'  from tb group by cno
      

  8.   


    SELECT 班级号,ROUND(SUM(CASE WHEN 工作状态='是' THEN 1 ELSE 0 END)/SUM(班级号),2)*100 +'%'
    FROM 表名
    GROUP BY 班级号