这样的结果能不能直接查出来
本帖最后由 sumsung0715 于 2013-03-23 13:32:32 编辑 数据库里有两个表如下:
计划表
jhid jhmc jhbh 等字段。
计划明细表
mxid mxmc jhid zt等字段
明细表里的zt类默认值为N,操作后会变为Y代表此项已完成
如能不能根据jhid字段关联查询出每项计划Y(完成项)所占的比例
完成项的值 : (Y的记录数/所有记录数)*100
查询出来如下例子显示:
jhid jhmc jhbh bili
1 第一批 2013 33
[解决办法]
select a.jhid,jhmc,jhbh,sum(case when zt='Y' then 1 else 0 end)*100.0/count(1) bill
from jhb a inner join jhmxb b
on a.jhid=b.jhid
group by a.jhid,jhmc,jhbh
create table jh
(
jhid int,
jhmc varchar(100),
jhbh int
)
go
create table mx
(
mxid int,
mxmc varchar(100),
jhid int,
zt char(1)
)
go
insert into jh values(1,'jh1','2011')
insert into jh values(2,'jh2','2012')
insert into jh values(3,'jh3','2013')
insert into mx values(1,'mx1',1,'N')
insert into mx values(2,'mx2',1,'Y')
insert into mx values(3,'mx3',1,'Y')
insert into mx values(4,'mx4',2,'Y')
insert into mx values(5,'mx4',2,'N')
select jh.*,CAST(ISNULL(cnt,0)*100.0/(select COUNT(1) from mx) as int) as bili
from jh
left join
(
select jhid, COUNT(1) as cnt
from mx
group by jhid
) t
on jh.jhid = t.jhid
/*
jhidjhmcjhbhbili
1jh1201160
2jh2201240
3jh320130
*/