У меня есть данные в Amazon Redshift (PostgreSQL), которые выглядят так:
acct | id_cd | username
acc1 |123 | kchalm
acc1 |123 | rsmith
acc1 |123 | ehamon
acc1 |123 | ljenin
acc2 |234 | kchalm
acc2 |234 | rtheis
acc3 |345 | jbalvi
acc3 |345 | twoods
acc3 |345 | jli
acc4 |345 | rshant
И мне нужно, чтобы они выглядели так.
acct | id_cd |username1|username2|username3
acc1 |123 | kchalm | rsmith | ehamon
acc1 |123 | ljenin | |
acc2 |234 | kchalm | rtheis |
acc3 |345 | jbalvi | twoods | jli
acc4 |345 | rshant | |
Я пробовал делать следующее с некоторым успехом. Я извлекаю данные из представления, используя соединения с критериями WHERE столько раз, сколько мне нужно для создания моих 3 столбцов с именами пользователей. Однако я не могу не чувствовать, что есть лучший способ сделать это, чем способ, которым я делаю это прямо сейчас, который автоматизирует процесс. Есть предложения?
SELECT
ut.acct,
ut.id_code,
ut.username,
ROW_NUMBER() OVER(PARTITION BY ut.account_code
ORDER BY
ut.username DESC) AS row_num
FROM
orig_user_table ut ;
select
a.acct
,a.id_cd
,a.username1
,b.username2
FROM
(
SELECT
acct,
id_cd,
username AS username1
FROM
vw_user_table_nums
WHERE
row_num = 1) a
LEFT JOIN (
SELECT
acct,
username AS username2
FROM
vw_user_table_nums
WHERE
row_num = 2) b ON
a.acct = b.acct
...