SQL:如何将三个记录合并为一个?

问题描述 投票:0回答:1

我运行查询以产生此结果。

username | userLastFirst    | email             | approver1         |department
MMickie  | Mouse, Mickie    | [email protected]  | Doe, John         |HR
MMickie  | Mouse, Mickie    | [email protected]  | Smith, Mike       |HR
MMickie  | Mouse, Mickie    | [email protected]  | Turner, David     |HR

但是我怎么把它变成这样:

username | userLastFirst    | email             | approver1    |approver2   |approver3    |department
MMickie  | Mouse, Mickie    | [email protected]  | Doe, John    |Smith, Mike |Turner, David| HR

而不是同一用户及其批准者的多行,我希望将其合并到其批准者列的一条记录中。

sql database join record consolidation
1个回答
0
投票

典型的选择是row_number和条件聚合:

select 
    username,
    userlastfirst,
    email,
    max(case when rn = 1 then approver end) approver1,
    max(case when rn = 2 then approver end) approver2,
    max(case when rn = 3 then approver end) approver3,
    department
from (
    select 
        t.*,
        row_number() over(partition by username order by approver) rn
    from mytable t
) t
group by 
    username,
    userfirstlast, 
    email,
    department 

您可以使用更多的select表达式来调整max(case ... end)子句,以每个用户和部门处理3个以上的主管。关键是查询返回一组fixed列。

© www.soinside.com 2019 - 2024. All rights reserved.