Вы можете попробовать это.
Если вы поддерживаете СУБД ROW_NUMBER
и оконную функцию, укажите номер строки в подзапросе, а затем выполните агрегатную функцию условия: pivot
CREATE TABLE T(
Account INT,
Badge INT,
Name VARCHAR(50)
);
INSERT INTO T VALUES (123,456,'Bob');
INSERT INTO T VALUES (123,789,'John');
INSERT INTO T VALUES (123,654,'Carl');
Запрос 1 :
SELECT Account,
MAX(CASE WHEN rn = 1 THEN Badge end) Badge1,
MAX(CASE WHEN rn = 1 THEN Name end) Name1,
MAX(CASE WHEN rn = 2 THEN Badge end) Badge2,
MAX(CASE WHEN rn = 2 THEN Name end) Name2,
MAX(CASE WHEN rn = 3 THEN Badge end) Badge3,
MAX(CASE WHEN rn = 3 THEN Name end) Name3
FROM
(
SELECT *,ROW_NUMBER() OVER(ORDER BY Account) rn
FROM T
) t1
GROUP BY Account
Результаты
| Account | Badge1 | Name1 | Badge2 | Name2 | Badge3 | Name3 |
|---------|--------|-------|--------|-------|--------|-------|
| 123 | 456 | Bob | 789 | John | 654 | Carl |