CASE cooperation_status WHEN'1'THEN'合作' WHEN'0'THEN'不合作' ELSE'未知' END
简单、好看,也够用。
但是它有一个很容易忽略的问题:不要在这里写 WHEN NULL。
2. 搜索式 CASE
另一种叫搜索式 CASE:
1 2 3 4 5
CASE WHEN 条件1THEN 结果1 WHEN 条件2THEN 结果2 ELSE 默认结果 END
例如:
1 2 3 4 5 6 7
CASE WHEN supplier_type ='1'THEN'经销商' WHEN supplier_type ='2'THEN'分销商' WHEN supplier_type ='3'THEN'仓库' WHEN supplier_type ISNULLTHEN'类型为空' ELSE'未知' END
这种就更像平时写代码里的:
1 2 3
if ... else if ... else ...
每一个 WHEN 后面都可以写完整条件。
比如判断金额区间:
1 2 3 4 5 6 7 8
CASE WHEN amount >=10000THEN'大额订单' WHEN amount >=1000THEN'普通订单' WHEN amount >0THEN'小额订单' WHEN amount =0THEN'零金额订单' WHEN amount ISNULLTHEN'金额为空' ELSE'异常金额' END
再比如多个字段一起判断:
1 2 3 4 5 6
CASE WHEN cooperation_status ='1'AND supplier_type ='1'THEN'合作经销商供货' WHEN cooperation_status ='1'AND supplier_type ='3'THEN'合作仓库供货' WHEN cooperation_status ISNULLTHEN'合作状态为空' ELSE'其他情况' END
CASE WHEN t1.VC2SUPPLIER1TYPE ='1'THEN store_supplier_dealer.VC2ID WHEN t1.VC2SUPPLIER1TYPE ='2'THEN store_supplier_distributor.VC2CODE WHEN t1.VC2SUPPLIER1TYPE ='3'THEN store_supplier_warehouse.VC2WHSENUM WHEN t1.VC2SUPPLIER1TYPE ISNULLTHENCOALESCE( (SELECT d2.VC2ID FROM MM_DEALER d2 WHERE d2.ID = t1.VC2SUPPLIER1CODE), (SELECT dt2.VC2CODE FROM MM_DISTRIBUTOR dt2 WHERE dt2.ID = t1.VC2SUPPLIER1CODE), (SELECT w2.VC2WHSENUM FROM MM_WAREHOUSE w2 WHERE w2.ID = t1.VC2SUPPLIER1CODE), t1.VC2SUPPLIER1CODE ) ELSE t1.VC2SUPPLIER1CODE ENDAS 供货方编码
供货方名称:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
CASE WHEN t1.VC2SUPPLIER1TYPE ='1'THEN store_supplier_dealer.VC2NAME WHEN t1.VC2SUPPLIER1TYPE ='2'THEN store_supplier_distributor.VC2NAME WHEN t1.VC2SUPPLIER1TYPE ='3'THEN store_supplier_warehouse.VC2WHSENAME WHEN t1.VC2SUPPLIER1TYPE ISNULLTHENCOALESCE( (SELECT d2.VC2NAME FROM MM_DEALER d2 WHERE d2.ID = t1.VC2SUPPLIER1CODE), (SELECT dt2.VC2NAME FROM MM_DISTRIBUTOR dt2 WHERE dt2.ID = t1.VC2SUPPLIER1CODE), (SELECT w2.VC2WHSENAME FROM MM_WAREHOUSE w2 WHERE w2.ID = t1.VC2SUPPLIER1CODE), t1.VC2SUPPLIER1NAME ) ELSE t1.VC2SUPPLIER1NAME ENDAS 供货方名称