2个表 
 
代码表xxdm
dm              mc
10010101      小学
10010102      中学
10010103      大学
报名表cbmxxcbh                clqxx
100101010001       录用
100101010002       录用
100101010003       不合格
100101020001       不合格
100101020001       不合格 我现在要得到个SQL语句是学校         报名人数    录用人数
小学           3            2
中学           2            0

解决方案 »

  1.   

    Select A.mc,count(B.cbh) as 报名人数,count(B.clqxx) as 录用人数 from xxdm A,cbmxx B,where A.dm=B.cbh思路是这个吧,你调调,最好把B表改改?
      

  2.   


    --> 测试数据:[xxdm]
    if object_id('[xxdm]') is not null drop table [xxdm]
    create table [xxdm]([dm] int,[mc] varchar(4))
    insert [xxdm]
    select 10010101,'小学' union all
    select 10010102,'中学' union all
    select 10010103,'大学'
    --> 测试数据:[cbmxx]
    if object_id('[cbmxx]') is not null drop table [cbmxx]
    create table [cbmxx]([cbh] bigint,[clqxx] varchar(6))
    insert [cbmxx]
    select 100101010001,'录用' union all
    select 100101010002,'录用' union all
    select 100101010003,'不合格' union all
    select 100101020001,'不合格' union all
    select 100101020001,'不合格'select mc,
    报名人数=count(1),
    录用人数=sum(case when clqxx='录用' then 1 else 0 end)
    from [xxdm] A join [cbmxx] B
    on charindex(rtrim(A.dm),rtrim(B.cbh))>0
    group by mc/*
    mc   报名人数        录用人数
    ---- ----------- -----------
    小学   3           2
    中学   2           0(2 行受影响)*/ drop table [xxdm]
    drop table [cbmxx]
      

  3.   

    你要在报名表里添加代码表xxdm的ID 主外关系对应 
      

  4.   

    select xxdm.mc as 学校,(select count(*) from cbmxx where substring(cbh,1,8) = test.dm) as 报名人数,
    (select count(*) from cbmxx where clqxx = '录用' and substring(cbh,1,8) = xxdm.dm ) as 录用人数
    from xxdm  
    where (select count(*) from cbmxx where substring(cbh,1,8) = xxdm.dm) > 0那个。。只考虑了结果,效率什么的要你自己改了
      

  5.   

    if OBJECT_ID('tempdb..#xxdm') is not null
    drop table #xxdm
    create table #xxdm
    (
    dm nvarchar(8),
    mc nvarchar(2)
    )
    if OBJECT_ID('tempdb..#cbmxx') is not null
    drop table #cbmxx
    create table #cbmxx
    (
    cbh  nvarchar(12),
    clqxx nvarchar(3)
    )insert #xxdm values ('10010101', '小学')
    insert #xxdm values ('10010102', '中学') 
    insert #xxdm values ('10010103', '大学') 
    select * from #xxdminsert #cbmxx values ('100101010001', '录用')
    insert #cbmxx values ('100101010002', '录用')
    insert #cbmxx values ('100101010003', '不合格')
    insert #cbmxx values ('100101020001', '不合格')
    insert #cbmxx values ('100101020001', '不合格')
    select * from #cbmxxselect x.mc as '学校',COUNT(1) as '报名人数',SUM(case when clqxx='录用' then 1 else 0 end) as '录用人数' from #xxdm x join #cbmxx c on x.dm=LEFT(c.cbh,8) group by x.mc
      

  6.   

    select Count(*)form cbmxx where cbh like '10010101 %'小学报名人数
    select Count(*)form cbmxx where cbh like '10010102 %'中学报名人数
    select Count(*)form cbmxx where cbh like '10010103 %'大学报名人数
      

  7.   

    可能我问题写错了  一行
    dm mc
    10010101 小学
    10010102 中学
    10010103 大学100101010001 录用
    100101010002 录用
    100101010003 不合格
    100101020001 不合格
    100101020002 不合格 
    这样才对10010101这个 报名了3个人    2个合格   
    10010102这个 报名了2个人    0个合格  
    显示出来  
    学校           报名总数              录取
    小学             3                2
    中学             2                 0
      

  8.   

    我这 为什么不行啊 我是SQL2000啊 
      

  9.   

    楼主仔细看看吧。
    怎么我们用SQL2005的测试的时候答案都是对的啊
    你的怎么就只有1行????
      

  10.   

    难道是数据库的问题?
    SQL2005的是对的,2000的就不对?