разделить столбец на несколько строк - PullRequest
0 голосов
/ 10 ноября 2019

у меня есть эта таблица

id  Name     Phone      Emails
1   abc,def  980,987    abc@,def@
2   aaa,bb   555,44     aaa@,bb
3   cc,gg    43 

и мне нужно получить эту таблицу

id  Name    Phone   Emails
1   abc     980     abc@
1   def     987     def@
2   aaa     555     aaa@
2   bb      44      bb
3   cc      43  
3   gg  

какие-либо предложения?

1 Ответ

1 голос
/ 10 ноября 2019

Я не уверен, является ли это дубликатом вашего другого вопроса, но он, безусловно, имеет тот же ответ:

with cte as (
      select id, convert(varchar(max), null) as name, convert(varchar(max), null)  as phone, convert(varchar(max), null)  as email,
             convert(varchar(max), names + ',') as names_rest,
             convert(varchar(max), phones + ',') as phones_rest,
             convert(varchar(max), emails + ',') as emails_rest,
             0 as lev
      from t
      union all
      select id, left(names_rest, charindex(',', names_rest) - 1),
             left(phones_rest, charindex(',', phones_rest) - 1),
             left(emails_rest, charindex(',', emails_rest) - 1),
             stuff(names_rest, 1, charindex(',', names_rest), ''),
             stuff(phones_rest, 1, charindex(',', phones_rest), ''),
             stuff(emails_rest, 1, charindex(',', emails_rest), ''),
             lev + 1
      from cte
      where names_rest like '%,%'
     )
select id, name, phone, email
from cte
where lev > 0;

Здесь - это db <> скрипка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...