日期:2014-05-17  浏览次数:20450 次

这样的结果能不能直接查出来
本帖最后由 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

/*
jhid jhmc jhbh bili
1 jh1 2011 60
2 jh2 2012 40
3 jh3 2013 0
*/