sql HR模式使一行显示一次

时间:2016-02-05 15:22:08

标签: sql oracle

我现在正在努力解决这个问题,但我认为我最好使用HR模式来展示这个例子:

以下SQL:

String

从那个sql,我让部门80出现两次,其中有SA_MAN与' Y'另一个是null。

我的问题是我怎么会让它出现在曾经只看过一次,但看看SA_MAN是否存在而没有出现两次。

1 个答案:

答案 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'。