是一个售后平台的问题,是在asp中,先用sql语句查询出结果,然后动态循环填充td并显示到页面上
sql语句如下
- SQL code
use sh2select *,(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>0group by a.serviceid,a.xm,a.zu ) as table1 order by zu, zs,myd desc
显示出的结果如下:
姓名 组别 总数 已完成 完成率 待反馈,处理中,评价,满意度
xxx xxx xxx xxx xxx xxx xxx xxx xxx
xxx表示相应的数据,myd表示满意度,就是客户对售后人员回答的问题的评价,分为非常满意,满意,一般,不满意,非常不满意,接近崩溃 等这六个,也就是sql语句中的pg1到pg6 , 姓名是售后人员的姓名(sql语句中的name),组别表示售后人员的所属的组别(sql语句中的a.zu),总数表示服务人员接收的客户提到的问题的总数(sql语句中的zs),已完成表示客户提的问题已经处理完成的个数(sql语句中的ywc),查询到的两个表,分别是service(服务人员)和wenti(问题)现在的需求是记录要跟据满意度排序,是在同一组的售后服务人员中找出满意度最高的然后排序,我试着用order by 发现无法按满意度排序,但是可以按组别和处理问题的总数排序,该怎么改才行呢?
------解决方案--------------------
order by zu, zs,myd desc
你这样写的myd是 在基于zu,zs 降序的基础上,再按myd降序。前两个字段已经决定了后面的降序结构。
如果你只是想按照 组 和满意度来降序排序的话:改成 order by zu,myd desc。
也就是说 满意度排序时,必须等组 和 问题总数排序完成后才能在他们的基础上再排序。
------解决方案--------------------
- SQL code
declare @t table (myd numeric(17,16))insert into @tselect 0.538814246439498 union allselect 0.157517201835248 union allselect 0.636789155319799 union allselect 0.0917430894309527 union allselect 0.390864313523449 union allselect 0.0197113645979016 union allselect 0.691648790372575 union allselect 0.771912013731017 union allselect 0.86527561193655 union allselect 0.412721545043269 union allselect 0.304729819221732 union allselect 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%*/
------解决方案--------------------
别名 不能在同一条语句中显示使用。