【问题标题】:SQL: How to consolidate three records into one?SQL:如何将三条记录合二为一?
【发布时间】:2020-03-04 20:31:08
【问题描述】:

我运行一个查询来生成这个。

username | userLastFirst    | email             | approver1         |department
MMickie  | Mouse, Mickie    | abc123@ships.com  | Doe, John         |HR
MMickie  | Mouse, Mickie    | abc123@ships.com  | Smith, Mike       |HR
MMickie  | Mouse, Mickie    | abc123@ships.com  | Turner, David     |HR

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

username | userLastFirst    | email             | approver1    |approver2   |approver3    |department
MMickie  | Mouse, Mickie    | abc123@ships.com  | Doe, John    |Smith, Mike |Turner, David| HR

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

【问题讨论】:

  • 请告诉我们查询?还要标记你的数据库。
  • (1) 用您正在使用的数据库标记您的问题。 (2) 如果批准人超过三个怎么办? (3) 你知道最大批准人数吗?
  • 审批人来自不同部门怎么办?

标签: sql database join record consolidation


【解决方案1】:

一个典型的选项是 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 

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

【讨论】:

    猜你喜欢
    • 2021-08-24
    • 2018-07-16
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多