===================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 sexWHEN '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;
效果如图:
eg:统计人口
SELECT SUM(population),CASE countryWHEN '中国'THEN '亚洲'WHEN '印度'THEN '亚洲'WHEN '日本'THEN '亚洲'WHEN '美国'THEN '北美洲'WHEN '加拿大' THEN '北美洲'WHEN '墨西哥' THEN '北美洲'ELSE '其他' ENDFROM Table_AGROUP BY CASE countryWHEN '中国'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 效率会更高。
引用:/prefect/p/5746624.html
====================== decode
DECODE(
ETHC.ETHC_COST_CODE,
'YCF',
ETHC.ETHC_TOTAL_AMOUNT,
'0') AS LONGDISTANCEMODEL_UNIT_PRICE, --远程费