SQL case when 的几种用法

SQL case when 的几种用法
第一种:case用于实现简单的"等于"判断。
比如数据库里的某个字段(VoucherClass)记录着不同的单据类型,比如数据库里显示1、2、3;1代表的是进货单;2代表的是退货单;3代表的是出库单;如果要做成报表展示出来,应该是不会将1、2、3展示出来,这时在查询语句里就可以使用case函数啦。
case 字段名
when ‘字段值’ then ‘需要返回的值’
when ‘字段值’ then ‘需要返回的值’
else ‘剩余所有的需要返回的值’
end

SELECT
(CASE tv.VoucherClass
WHEN ‘1’ THEN ‘进货单’
WHEN ‘2’ THEN ‘退货单’
ELSE ‘出库单’
END) AS voucherclass
FROM dbo.Table_Vouchers AS TV
在这里插入图片描述

第二种:case还可用于"有条件"的逻辑判断。
比如当单据为出库单时,那么数量要显示为负数,其余单据的数量都显示为正数。
case
when 字段名 = ‘字段值’ then ‘需要返回的值’
else ‘剩余所有的需要返回的值’
end

SELECT
(CASE
WHEN tv.VoucherClass =‘3’ THEN (tvi.Count * -1)
ELSE tvi.Count
END )
AS count
FROM dbo.Table_Vouchers AS TV
JOIN dbo.Table_VoucherItems AS TVI ON tvi.VoucherId=tv.Id
在这里插入图片描述
注意:两种用法最后else 可以写,可以不写,但都需要 ‘end’ 结尾

第三种 判断字段为null的方法
select case when AnditCount is null then 0 else AnditCount end
在这里插入图片描述在这里插入图片描述

  • 8
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL中的CASE WHEN语句可以根据条件来选择不同的结果进行返回。使用CASE函数可以解决很多问题。如果使用CASE函数,我们只需要一条SQL语句就可以解决问题。以下是一个具体的示例: SELECT std_id, CASE WHEN COUNT(*) = 1 THEN MAX(class_id) --只选择一门课程的学生的情况 ELSE MAX(CASE WHEN main_class_flg = 'Y' THEN class_id ELSE NULL END) END AS main_class FROM Studentclass GROUP BY std_id; 另一种简单的想法是执行两条不同的SQL语句进行查询。条件1是只选择了一门课程的学生: SELECT std_id, MAX(class_id) AS main_class FROM Studentclass GROUP BY std_id HAVING COUNT(*) = 1; 在使用CASE函数时需要注意几点: - CASE函数只返回第一个符合条件的值,剩下的CASE部分会被自动忽略。 - 在CASE函数中,如果ELSE部分不写,默认值是NULL。 - 在CASE函数中,可以使用BETWEEN、LIKE、IS NULL、IN、EXISTS等操作符。比如使用IN和EXISTS可以进行子查询,从而实现更多的功能。 - 需要注意不要犯以下错误:CASE col_1 WHEN 1 THEN 'Right' WHEN NULL THEN 'Wrong' END <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [sql语句之case when的用法](https://blog.csdn.net/hubolu123/article/details/113253044)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值