Как развернуть строки строк в несколько столбцов? - PullRequest
0 голосов
/ 04 сентября 2018

Я искал и пытался и не нашел точный пример кода SQL, который я ищу. У меня есть несколько повторений на учетную запись (в строках), и мне нужно распределить их по столбцам. У меня будет до 3 для каждой учетной записи.

Мои исходные данные выглядят так:

+---------+-------+------+
| Account | Badge | Name |
+---------+-------+------+
|     123 |   456 | Bob  |
|     123 |   789 | John |
|     123 |   654 | Carl |
+---------+-------+------+

Мне нужно, чтобы это выглядело так:

+---------+--------+-------+--------+-------+--------+-------+
| Account | Badge1 | Name1 | Badge2 | Name2 | Badge3 | Name3 |
+---------+--------+-------+--------+-------+--------+-------+
|     123 |    456 | Bob   |    789 | John  |    654 | Carl  |
+---------+--------+-------+--------+-------+--------+-------+

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 04 сентября 2018

Вы можете попробовать это.

Если вы поддерживаете СУБД 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 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...