2个表
代码表xxdm
dm mc
10010101 小学
10010102 中学
10010103 大学
报名表cbmxxcbh clqxx
100101010001 录用
100101010002 录用
100101010003 不合格
100101020001 不合格
100101020001 不合格 我现在要得到个SQL语句是学校 报名人数 录用人数
小学 3 2
中学 2 0
代码表xxdm
dm mc
10010101 小学
10010102 中学
10010103 大学
报名表cbmxxcbh clqxx
100101010001 录用
100101010002 录用
100101010003 不合格
100101020001 不合格
100101020001 不合格 我现在要得到个SQL语句是学校 报名人数 录用人数
小学 3 2
中学 2 0
--> 测试数据:[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]
(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那个。。只考虑了结果,效率什么的要你自己改了
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
select Count(*)form cbmxx where cbh like '10010102 %'中学报名人数
select Count(*)form cbmxx where cbh like '10010103 %'大学报名人数
dm mc
10010101 小学
10010102 中学
10010103 大学100101010001 录用
100101010002 录用
100101010003 不合格
100101020001 不合格
100101020002 不合格
这样才对10010101这个 报名了3个人 2个合格
10010102这个 报名了2个人 0个合格
显示出来
学校 报名总数 录取
小学 3 2
中学 2 0
怎么我们用SQL2005的测试的时候答案都是对的啊
你的怎么就只有1行????
SQL2005的是对的,2000的就不对?