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

问题描述

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的语句

解决方案

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语句

时间: 2024-10-03 18:56:28

select-sql 有关case when 嵌套case when 语句优化的相关文章

sql 根据条件更新记录 case then

sql 根据条件更新记录 case then第一个利用存储过程来做 declare @str varchar(500) set @str=@str+'update 表名' if state=1   set @str=@str+' set state=0' else    set @str=@str+' set state=1' set @str=@str+' where moduleroleid='1' exec(@str) // update 表名 set state=0 where modu

sql 日期函数getdate()和case语法

日期函数 定义和用法 GETDATE() 函数从 SQL Server 返回当前的时间和日期. 语法 GETDATE()实例 例子 1 使用下面的 SELECT 语句: SELECT GETDATE() AS CurrentDateTime结果: CurrentDateTime 2008-12-29 16:25:46.635 注释:上面的时间部分精确到毫秒. 例子 2 下面的 SQL 创建带有日期时间列 (OrderDate) 的 "Orders" 表: CREATE TABLE Or

ASP中用select case代替其他语言中的switch case, default用case else_应用技巧

asp中不能用switch语句,要用select case语句了 简单的介绍一下 选择报表的工作一样,如果语句.然而不同的是,他们可以检查多个值.当然,你有 多个相同的,如果.. else语句,但是这并不总是最好的方法. 选择语句允许一个程序来计算表达式,并试图匹配表达式的值案件标签.如果找到匹 配,程序执行相关的声明.对于SELECT语句的语法如下: select case expression case label_1 statements_1 case label_2 statements

ASP中用select case代替其他语言中的switch case, default用case else

asp中不能用switch语句,要用select case语句了 简单的介绍一下 选择报表的工作一样,如果语句.然而不同的是,他们可以检查多个值.当然,你有 多个相同的,如果.. else语句,但是这并不总是最好的方法. 选择语句允许一个程序来计算表达式,并试图匹配表达式的值案件标签.如果找到匹 配,程序执行相关的声明.对于SELECT语句的语法如下: select case expression case label_1 statements_1 case label_2 statements

sql语句优化之SQL Server(详细整理)_MsSql

MS SQL Server查询优化方法 查询速度慢的原因很多,常见如下几种 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8.sp_lock,sp_who,活动的用户查看,原因是读写竞争资源. 9.返回了不必要的行和列 10.查询语句不好,

信息-跪等大神——SQL语句优化

问题描述 跪等大神--SQL语句优化 这个语句如何优化跪等: select A0188,A0190,A0101,cast(dp.dept_code as int) as a01depcode,A0177,case when A0107='男' then 2 else 3 end as sex,A0117,A0159,A0148,MobileTel,A01069,A01071,GW_NAME,case when A0191='在职人员' then 9 else 7 end as a0191 fro

基于索引的SQL语句优化之降龙十八掌

  From:www.oracle.com.cn 基于索引的SQL语句优化之降龙十八掌 1        前言        2 2        总纲        2 3        降龙十八掌        3第一掌避免对列的操作        3第二掌避免不必要的类型转换        4第三掌增加查询的范围限制        4第四掌尽量去掉"IN"."OR"        4第五掌尽量去掉 "<>"        5第六

《Java 7程序设计入门经典》一3.6 嵌套的switch语句

3.6 嵌套的switch语句 外层switch语句可能将switch语句作为其语句序列的一部分.这称为嵌套的(nested)switch语句.甚至在内层和外层的switch语句可以包含相同的case常数,也不会有冲突.例如,下面的代码片段是完全可行的:

PHP 函数,文件,sql 语句优化方法

.在可以用file_get_contents替代file.fopen.feof.fgets等系列方法的情况下,尽量用file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个url文件时候的php教程版本问题: <?php echo file_get_contents("test.txt"); ?> file_get_contents() 函数把整个文件读入一个字符串中. 和 file() 一样,不同的是 file_get