首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

这么的结果能不能直接查出来

2013-03-25 
这样的结果能不能直接查出来本帖最后由 sumsung0715 于 2013-03-23 13:32:32 编辑数据库里有两个表如下:计

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

热点排行