我现在正在努力解决这个问题,但我认为我最好使用HR模式来展示这个例子:
以下SQL:
String
从那个sql,我让部门80出现两次,其中有SA_MAN与' Y'另一个是null。
我的问题是我怎么会让它出现在曾经只看过一次,但看看SA_MAN是否存在而没有出现两次。
答案 0 :(得分:0)
稍作修改:不要按case
分组。只需在select子句中对其进行最大化。
SELECT department,
Sum(salary) "Money",
max(CASE
WHEN job_id = 'SA_MAN' THEN 'Y'
END) "Indicator"
FROM (SELECT first_name
|| ' '
|| last_name AS "name",
salary,
job_id,
department_id department
FROM employees)
GROUP BY department
ORDER BY 1;
编辑:如果您想获得另一个指标,那么
max(CASE WHEN condition THEN 'N/A' END) "Indicator"
但是如果你想要多个指标,你就不能在同一列中做到这一点(没有人不能用简单的数据类型)。解决方案是添加更多列:
SELECT department,
Sum(salary) "Money",
max(CASE WHEN job_id = 'SA_MAN' THEN 'Y' END) "IndicatorY"
max(CASE WHEN condition THEN 'N' END) "IndicatorN"
max(CASE WHEN anothercondition THEN 'N/A' END) "IndicatorNA"
FROM (SELECT first_name
|| ' '
|| last_name AS "name",
salary,
job_id,
department_id department
FROM employees)
GROUP BY department
ORDER BY 1;
列意味着:'对于这个部门,员工分别有N或Y或NA'。