MS SQL Транспонировать данные в следующий столбец, макс. Транспонированных элементов = 5 - PullRequest
0 голосов
/ 06 февраля 2020

Ниже приведен мой формат данных

Name           Tel           Email
John           25671234      abc@abc.com
Peter          98047766      aaa@kk.com
Peter          98047766      bbb@sc.com
Peter          98047766      ccc@kd.com
Peter          98047766      ddd@kk.com
Peter          98047766      eee@sc.com
Peter          98047766      fff@kd.com
Mary           33456789      987@dkh.com

Теперь я хотел бы изменить формальную форму, как показано ниже. Как бы я сделал это, используя SQL Сервер?

Name           Tel           Email        Email1      EMAIL2      EMAIL3      EMAIL4     EMAIL5
John           25671234      abc@abc.com
Peter          98047766      aaa@kk.com   bbb@sc.com  ccc@kd.com  ccc@kd.com  ddd@kk.com eee@sc.com
Mary           33456789      987@dkh.com

1 Ответ

0 голосов
/ 06 февраля 2020

Вы можете перечислить значения и сводку. Я бы использовал условную агрегацию:

select name, telephone,
       max(case when seqnum = 1 then email end) as email_1,
       max(case when seqnum = 2 then email end) as email_2,
       max(case when seqnum = 3 then email end) as email_3,
       max(case when seqnum = 4 then email end) as email_4,
       max(case when seqnum = 5 then email end) as email_5
from (select t.*,
             row_number() over (partition by name order by (select null)) as seqnum
      from t
     ) t
group by name, telephone
...