case when的两种用法

一、Case具有两种格式。简单Case函数和Case搜索函数


 第一种 格式 : 简单Case函数 :

格式说明    

    case 列名

    when   条件值1   then  选择项1

    when   条件值2    then  选项2.......

    else     默认值      end

eg:

    select
    case   job_level
    when     '1'     then    '1111'
    when   '2'     then    '1111'
    when   '3'     then    '1111'
    else       'eee' end
    from     dbo.employee

eg2:

 case ISNeed 
                when '1' then '10' 
                when '0' then '20' 
  end as TotalFreight

 第二种  格式 :Case搜索函数

格式说明    

    case  

    when  列名= 条件值1   then  选择项1

    when  列名=条件值2    then  选项2.......

    else    默认值 end

eg:

    update  employee
    set         e_wage =
    case
    when   job_level = '1'    then e_wage*1.97
    when   job_level = '2'   then e_wage*1.07
    when   job_level = '3'   then e_wage*1.06
    else     e_wage*1.05
    end

eg2:

    Province = 
            CASE 
                WHEN DCCity = '商丘' THEN '河南'
                WHEN DCCity <> '商丘' THEN '非河南'
            END, 

提示:通常我们在写Case When的语句的时候,会容易忘记 end 这个结束,一定要记得哟!

比较: 两种格式,可以实现相同的功能。

    简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。还有一个需要注意的问题,Case函数只返回第一个符合条件的     值,剩下的Case部分将会被自动忽略。

二、SQL 利用case when 动态给SQL添加条件查询语句

想法是

如果order=81的 stats !=1的情况下,不会查询order=129的数据,反之,当order=81的stats=1,就需要显示order=129的数据

代码:

select * from syscon where number=3 and
(
CASE  WHEN 1 =(SELECT [stats] FROM dbo.syscon WHERE [ORDER]=81) THEN 1
CASE  WHEN 1 != (SELECT [stats] FROM dbo.syscon WHERE [ORDER]=81) AND [Order] != 129 THEN 1
           ELSE 0 END
)=1
ORDER by id

发布了57 篇原创文章 · 获赞 59 · 访问量 13万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览