SQL транспонирование на основе значений в столбце 1 - PullRequest
0 голосов
/ 18 июня 2020

У меня есть запрос SQL, который дает мне результат с двумя столбцами, например:

A | B
-----
2 | 1
3 | 2
3 | 3
3 | 4
3 | 5
4 | 6
4 | 7
4 | 8
4 | 9

Я хотел бы разбить это на несколько столбцов, как это. Каждый для каждой строки в A с определенным значением преобразует это в столбцы. Максимальное количество строк, в котором может встречаться конкретное значение, например, x , в столбце A равно 4 (если это помогает).

A | B1   | B2   | B3  |  B4 
----------------------------
2 | 1    | NULL | NULL | NULL
3 | 2    | 3    | 4    | 5
4 | 6    | 7    | 8    | 9

Я застрял, пытаясь сделать это с помощью pivot часами. Теперь я думаю о том, чтобы запросить это в python (клиент использует это) и выполнить преобразование там (что легко). Но можно ли это сделать в SQL? Я использую SQL Server 2016.

1 Ответ

1 голос
/ 18 июня 2020

Можно использовать row_number() и условное агрегирование:

select a,
       max(case when seqnum = 1 then b end) as b_1,
       max(case when seqnum = 2 then b end) as b_2,
       max(case when seqnum = 3 then b end) as b_3,
       max(case when seqnum = 4 then b end) as b_4
from (select t.*, row_number() over (partition by a order by b) as seqnum
      from t
     ) t
group by a;
...