赞
踩
CASE
season
WHEN 'Spring' THEN '春天'
WHEN 'Summer' THEN '夏天'
WHEN 'autumn' THEN '秋天'
else '冬天'
end
CASE WHEN season= 'Spring' THEN '春天'
WHEN season= 'Summer' THEN '夏天'
WHEN season= 'autumn' THEN '秋天'
else '冬天'
END
注意一:then和else之后的数据都是要进行放到同一个列一下的数据,所以这些数据类型要一致,否则SQL执行会报错的。
注意二:case when可以对非本列进行when的操作,也就是基于对别的column的计算来选择本column的值。
SELECT
age,
(CASE WHEN age >=0 AND age< 60 THEN '上班'
WHEN age >= 60 AND age < 80 THEN '退休'
WHEN age >= 80 THEN '死亡'
ELSE '非人类'
END) AS target
FROM
person
注意的是:我们甚至可以基于case when语句或者他的别名进行分组
SELECT
max(age),
(CASE WHEN age >=0 AND age< 60 THEN '上班'
WHEN age >= 60 AND age < 80 THEN '退休'
WHEN age >= 80 THEN '死亡'
ELSE '非人类'
END) AS target
FROM
person group by
CASE WHEN age >=0 AND age< 60 THEN '上班'
WHEN age >= 60 AND age < 80 THEN '退休'
WHEN age >= 80 THEN '死亡'
ELSE '非人类'
END
SELECT
E_CODE,
SUM(CASE WHEN E_TYPE = 0 THEN E_VALUE ELSE 0 END) AS WATER_ENERGY,--水耗
SUM(CASE WHEN E_TYPE = 1 THEN E_VALUE ELSE 0 END) AS ELE_ENERGY,--电耗
SUM(CASE WHEN E_TYPE = 2 THEN E_VALUE ELSE 0 END) AS HEAT_ENERGY--热耗
FROM
THTF_ENERGY_TEST
GROUP BY
E_CODE
国家(country) 人口(population)
中国 600
美国 100
加拿大 100
英国 200
法国 300
日本 250
德国 200
墨西哥 50
印度 250
想要解决这个问题,你会怎么做?生成一个带有洲Code的View,是一个解决方法,但是这样很难动态的改变统计的方式。
如果使用Case函数,SQL代码如下:
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 country
WHEN '中国' THEN '亚洲'
WHEN '印度' THEN '亚洲'
WHEN '日本' THEN '亚洲'
WHEN '美国' THEN '北美洲'
WHEN '加拿大' THEN '北美洲'
WHEN '墨西哥' THEN '北美洲'
ELSE '其他' END
这个子句整体看作一列A,则 上述语句就是一句普通的分组语句了:SELECT SUM(population), A FROM Table_A GROUP BY A;
SQL代码如下:
SELECT
CASE WHEN salary <= 500 THEN '1'
WHEN salary > 500 AND salary <= 600 THEN '2'
WHEN salary > 600 AND salary <= 800 THEN '3'
WHEN salary > 800 AND salary <= 1000 THEN '4'
ELSE NULL END salary_class,
COUNT(*)
FROM Table_A
GROUP BY
CASE WHEN salary <= 500 THEN '1'
WHEN salary > 500 AND salary <= 600 THEN '2'
WHEN salary > 600 AND salary <= 800 THEN '3'
WHEN salary > 800 AND salary <= 1000 THEN '4'
ELSE NULL END;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。