SQL: Как объединить три записи в одну? - PullRequest
0 голосов
/ 04 марта 2020

Я запускаю запрос для получения этого.

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 Ответ

0 голосов
/ 04 марта 2020

Типичным параметром является 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 супервизоров на пользователя и отдел. Ключевым моментом является то, что запрос возвращает фиксированный набор столбцов.

...