我运行查询以产生此结果。
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
而不是同一用户及其批准者的多行,我希望将其合并到其批准者列的一条记录中。
典型的选择是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列。