如何在Oracle SQL的单行中显示相关记录?

安妮莎

我写了一个查询,将两个表连接起来,结果如下:

SELECT emp.employee_id,
      dept.department_name, 
      dept.department_id                                    
FROM employee emp, 
    department dept                                
WHERE emp.department_id = dept.department_id;
Employee_ID Department  Department_ID
Mark        Sales          D1
Mark        Marketing      D2
Justin      Textiles       D3
Kimberley   (null)        (null) 

但是,我需要在输出下方显示一个名为“状态”的新字段。Mark可以在两个部门中工作,因此计数为“ 2”,状态为“ Y”(可以显示任何一条记录)。贾斯汀仅在一个部门工作,计数为1,状态应为“ N”。金伯利在任何地方都不工作,计数为0,状态应为“ N”。

预期产量:

Employee_ID  Department  Department_ID  Status
Mark          Sales          D1            Y
Justin        Textiles       D3            N
Kimberley      (null)       (null)         N

请帮忙。

专线小巴

我了解您要显示每个用户的第一个部门,并添加一个标志以指示该员工是否至少属于另一个部门。

您可以使用窗口功能:

select 
    employee_id,
    department_name,
    department_id
    case when cnt <= 1 then 'N' else 'Y' end status
from (
    select 
        emp.employee_id,
        dept.department_name, 
        dept.department_id,
        row_number() over(partition by emp.employee_id order by dept.department_id) rn,
        count(*) over(partition by emp.employee_id) cnt
    from 
        employee emp
        left join department dept on emp.department_id = dept.department_id
) t
where rn = 1

旁注:始终使用显式联接(带有on关键字),而不是老式的隐式联接(在from子句中带有逗号),后者的语法更难于阅读和维护。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章