34,592
社区成员
发帖
与我相关
我的任务
分享
use sh2
select *,(convert(decimal,pg1)*3+convert(decimal,pg2)*2+convert(decimal,pg3)*1-convert(decimal,pg4)*1-convert(decimal,pg5)*2-convert(decimal,pg6)*3)/(convert(decimal,zs)*3) as myd from (
select
a.serviceid,
a.xm,
a.zu,
count(b.id) as zs,
(select name from zu where id=a.zu) as name ,
(select count(wenti.id) from wenti where (typeid=4 ) and service=a.serviceid) as ywc,
(select count(wenti.id) from wenti where (typeid<>4 ) and (typeid<>7) and service=a.serviceid) as clz,
(select count(wenti.id) from wenti where (typeid=7 ) and service=a.serviceid) as dfk,
(select count(wenti.id) from wenti where typeid=4 and service=a.serviceid and pg=1) as pg1,
(select count(wenti.id) from wenti where typeid=4 and service=a.serviceid and pg=2) as pg2,
(select count(wenti.id) from wenti where typeid=4 and service=a.serviceid and pg=3) as pg3,
(select count(wenti.id) from wenti where typeid=4 and service=a.serviceid and pg=4)as pg4,
(select count(wenti.id) from wenti where typeid=4 and service=a.serviceid and pg=5) as pg5,
(select count(wenti.id) from wenti where typeid=4 and service=a.serviceid and pg=6) as pg6
from service as a left join wenti as b on a.serviceid=b.service where b.id>0
group by a.serviceid,a.xm,a.zu ) as table1 order by zu, zs,myd desc
select *,cast(((convert(decimal,pg1)*3+convert(decimal,pg2)*2+convert(decimal,pg3)*1-convert(decimal,pg4)*1-convert(decimal,pg5)*2-convert(decimal,pg6)*3)/(convert(decimal,zs)*3)*100 as decimal(15,2)) as myd
use sh2
select *,(convert(decimal,pg1)*3+convert(decimal,pg2)*2+convert(decimal,pg3)*1-convert(decimal,pg4)*1-convert(decimal,pg5)*2-convert(decimal,pg6)*3)/(convert(decimal,zs)*3) as myd1, cast(myd1*100 as decimal(15,2)) as myd from (
select
a.serviceid,
a.xm,
a.zu,
count(b.id) as zs,
(select name from zu where id=a.zu) as name ,
(select count(wenti.id) from wenti where (typeid=4 ) and service=a.serviceid) as ywc,
(select count(wenti.id) from wenti where (typeid<>4 ) and (typeid<>7) and service=a.serviceid) as clz,
(select count(wenti.id) from wenti where (typeid=7 ) and service=a.serviceid) as dfk,
(select count(wenti.id) from wenti where typeid=4 and service=a.serviceid and pg=1) as pg1,
(select count(wenti.id) from wenti where typeid=4 and service=a.serviceid and pg=2) as pg2,
(select count(wenti.id) from wenti where typeid=4 and service=a.serviceid and pg=3) as pg3,
(select count(wenti.id) from wenti where typeid=4 and service=a.serviceid and pg=4)as pg4,
(select count(wenti.id) from wenti where typeid=4 and service=a.serviceid and pg=5) as pg5,
(select count(wenti.id) from wenti where typeid=4 and service=a.serviceid and pg=6) as pg6
from service as a left join wenti as b on a.serviceid=b.service where b.id>0
group by a.serviceid,a.xm,a.zu ) as table1 order by zu, myd desc
declare @t table (myd numeric(17,16))
insert into @t
select 0.538814246439498 union all
select 0.157517201835248 union all
select 0.636789155319799 union all
select 0.0917430894309527 union all
select 0.390864313523449 union all
select 0.0197113645979016 union all
select 0.691648790372575 union all
select 0.771912013731017 union all
select 0.86527561193655 union all
select 0.412721545043269 union all
select 0.304729819221732 union all
select 0.494764308426483
--不要去掉这个别名a 否则结果会发生变化的
select ltrim(cast(myd*100 as decimal(18,2)))+'%' as myd from @t a order by a.myd desc
/*
myd
------------------------------------------
86.53%
77.19%
69.16%
63.68%
53.88%
49.48%
41.27%
39.09%
30.47%
15.75%
9.17%
1.97%
*/
select * ,
( convert(decimal, pg1) * 3 + convert(decimal, pg2) * 2
+ convert(decimal, pg3) * 1 - convert(decimal, pg4) * 1
- convert(decimal, pg5) * 2 - convert(decimal, pg6) * 3 )
/ ( convert(decimal, zs) * 3 ) as myd
from ( select a.serviceid ,
a.xm ,
a.zu ,
count(b.id) as zs ,
( select name
from zu
where id = a.zu
) as name ,
( select count(wenti.id)
from wenti
where ( typeid = 4 )
and service = a.serviceid
) as ywc ,
( select count(wenti.id)
from wenti
where ( typeid <> 4 )
and ( typeid <> 7 )
and service = a.serviceid
) as clz ,
( select count(wenti.id)
from wenti
where ( typeid = 7 )
and service = a.serviceid
) as dfk ,
( select count(wenti.id)
from wenti
where typeid = 4
and service = a.serviceid
and pg = 1
) as pg1 ,
( select count(wenti.id)
from wenti
where typeid = 4
and service = a.serviceid
and pg = 2
) as pg2 ,
( select count(wenti.id)
from wenti
where typeid = 4
and service = a.serviceid
and pg = 3
) as pg3 ,
( select count(wenti.id)
from wenti
where typeid = 4
and service = a.serviceid
and pg = 4
) as pg4 ,
( select count(wenti.id)
from wenti
where typeid = 4
and service = a.serviceid
and pg = 5
) as pg5 ,
( select count(wenti.id)
from wenti
where typeid = 4
and service = a.serviceid
and pg = 6
) as pg6
from service as a
left join wenti as b on a.serviceid = b.service
where b.id > 0
group by a.serviceid ,
a.xm ,
a.zu
) as table1
order by zu ,
zs ,
myd desc --前面两个字段都好使,只有myd 排序无效?