x781711884 2016-04-26 07:22 采纳率: 33.3%
浏览 4562

sql 有关case when 嵌套case when 语句优化

///////////////////////////////////////////////////////////////////修改前——没添加超过300的语句/////////////////////////////////////////////////////////////////////////////////
select dbo.Base_Integity.ID ,Driver_Name, Mileage,Ultra_oil ,

 case when (ABS (Ultra_oil) > 100 ) and  (Ultra_oil > 0 ) then  80+(Ultra_oil-100)*1  when  ( ABS (Ultra_oil) > 100 ) and  (Ultra_oil < 0 ) then -(80+(ABS(Ultra_oil)-100)*1) else (Ultra_oil*0.8) end as Integrity_Bonus,

dbo.Base_Integity.Remark,dbo.Base_Integity.Month,dbo.Base_Organization.Organization_Name
from Base_Integity
left join Base_Organization on Base_Integity.Organization_ID=Base_Organization.Organization_ID
left join dbo.Base_Driver on Base_Integity.Driver_ID =Base_Driver.Driver_ID

/////////////////////////////////////////////////////////////修改后的添加了的300的语句//////////////////////////////////////////////////////////////////////////////

 select dbo.Base_Integity.ID ,Driver_Name, Mileage,Ultra_oil , 


case when 
((case when (ABS (Ultra_oil) > 100 ) and  (Ultra_oil > 0 ) then 80+(Ultra_oil-100)*1 when  ( ABS (Ultra_oil) > 100 ) and  (Ultra_oil < 0 ) then -(80+(ABS(Ultra_oil)-100)*1) else (Ultra_oil*0.8)  end) > 300 ) 

            then  300 

 when  

((case when (ABS (Ultra_oil) > 100 )  and  (Ultra_oil > 0 ) then 80+(Ultra_oil-100)*1 when  ( ABS (Ultra_oil) > 100 ) and  (Ultra_oil < 0 ) then -(80+(ABS(Ultra_oil)-100)*1)  else (Ultra_oil*0.8)  end )<300)

    then  

((case when (ABS (Ultra_oil) > 100 )  and  (Ultra_oil > 0 ) then 80+(Ultra_oil-100)*1 when  ( ABS (Ultra_oil) > 100 ) and  (Ultra_oil < 0 ) then -(80+(ABS(Ultra_oil)-100)*1)  else (Ultra_oil*0.8)  end)) 

else (Ultra_oil*0.8) end  

  as Integrity_Bonus , 

     --超过300语句     
 case when 
((case when (ABS (Ultra_oil) > 100 )  and  (Ultra_oil > 0 ) then 80+(Ultra_oil-100)*1 when  ( ABS (Ultra_oil) > 100 ) and  (Ultra_oil < 0 ) then -(80+(ABS(Ultra_oil)-100)*1)  else (Ultra_oil*0.8)  end )>300) 

          then  

((case when (ABS (Ultra_oil) > 100 )  and  (Ultra_oil > 0 ) then 80+(Ultra_oil-100)*1 when  ( ABS (Ultra_oil) > 100 ) and  (Ultra_oil < 0 ) then -(80+(ABS(Ultra_oil)-100)*1)  else (Ultra_oil*0.8)  end )-300) 

            when  

((case when (ABS (Ultra_oil) > 100 )  and  (Ultra_oil > 0 ) then 80+(Ultra_oil-100)*1 when  ( ABS (Ultra_oil) > 100 ) and  (Ultra_oil < 0 ) then -(80+(ABS(Ultra_oil)-100)*1)  else (Ultra_oil*0.8)  end )<300) 

    then  0 else null end as Remark,

dbo.Base_Integity.Month,dbo.Base_Organization.Organization_Name 
            from Base_Integity 
            left join Base_Organization on Base_Integity.Organization_ID=Base_Organization.Organization_ID 
            left join dbo.Base_Driver on Base_Integity.Driver_ID =Base_Driver.Driver_ID 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 即:小于等于100升的,奖金(Integrity_Bonus)=节超油( Ultra_oil )*0.8
      大于100升的,奖金=80+(节超油-100)*1
     节超奖金大于300元的按300元算,超出部分记录备注(Remark)
        优化一下添加了超过300的语句
  • 写回答

1条回答

  • Robot-S 2016-04-26 09:26
    关注

    select
    (
    case
    when o.class_id='10' then (select m.busi_id from pd_busi_instance_inter m where m.oss_busi_id=#ossBusiId#)......
    答案就在这里:SQL的case when语句
    ----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)