oracle:case when then else end

===================case when then else end 

(CASE ETDL.ETDL_TYPE
WHEN '00' THEN
'安装'
WHEN '01' THEN
'维修'
WHEN '02' THEN
'拆旧'
WHEN '03' THEN
'测量'
WHEN '04' THEN
'维修+拆旧'
WHEN '05' THEN
'安装+拆旧'
WHEN '06' THEN
'上样'
WHEN '07' THEN
'铺贴指导'
END) AS ETDL_TYPE, --服务类型

--简单Case函数
CASE sex
         WHEN '1' THEN '男'
         WHEN '2' THEN '女'
ELSE '其他' END
--Case搜索函数
CASE WHEN sex = '1' THEN '男'
         WHEN sex = '2' THEN '女'
ELSE '其他' END


SELECT country 国家,
SUM(CASE WHEN sex='1' THEN population ELSE '0' END) 男,
SUM(CASE WHEN sex='2' THEN population ELSE '0' END) 女,
SUM(population) 总人口
FROM test_case
GROUP BY country;

  效果如图:

国家女      |   总人口
中国340260      |        600
美国4555      | 100   
加拿大5149        |100   
英国4060        |  100  

 




eg:统计人口

SELECT  SUM(population),
        CASE country
                WHEN '中国'     THEN '亚洲'
                WHEN '印度'     THEN '亚洲'
                WHEN '日本'     THEN '亚洲'
                WHEN '美国'     THEN '北美洲'
                WHEN '加拿大'  THEN '北美洲'
                WHEN '墨西哥'  THEN '北美洲'
        ELSE '其他' END
FROM    Table_A
GROUP BY CASE country
                WHEN '中国'     THEN '亚洲'
                WHEN '印度'     THEN '亚洲'
                WHEN '日本'     THEN '亚洲'
                WHEN '美国'     THEN '北美洲'
                WHEN '加拿大'  THEN '北美洲'
                WHEN '墨西哥'  THEN '北美洲'
        ELSE '其他' END;

Case函数不同于DECODE函数,在Case函数中,可以使用between,like,is null,in,exists等等。
例如:有两个表,tbl_A,tbl_B,两个表中都有keyCol列。现在我们对两个表进行比较,tbl_A中的keyCol列的数据如果 在tbl_B的keyCol列的数据中可以找到, 返回结果'Matched',如果没有找到,返回结果'Unmatched'。

--使用IN的时候:
SELECT keyCol,
CASE WHEN keyCol IN (SELECT keyCol FROM tbl_B)
THEN 'Matched'
ELSE 'Unmatched' END Label
FRO tbl_A;
--使用Exists的时候
SELECT keyCol,
CASE WHEN EXISTS (SELECT * FROM tbl_B WHERE tbl_A.keyCol=tbl_B.keyCol)
THEN 'Matched' ELSE 'Unmatched' END Label
FROM tbl_A;

--相比较而言肯定使用第二种 exists 效率会更高。

引用:http://www.cnblogs.com/prefect/p/5746624.html

======================  decode 

DECODE(
ETHC.ETHC_COST_CODE,
'YCF',
ETHC.ETHC_TOTAL_AMOUNT,
'0') AS LONGDISTANCEMODEL_UNIT_PRICE, --远程费

转载于:https://www.cnblogs.com/21heshang/p/6585918.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值