SQL ОБЪЕДИНЯЕТ несколько СТОЛБЦОВ в ОДИН

#sql #sql-server #tsql

Вопрос:

У меня есть эта таблица в SQL Server 2019:

 ID Col1 Col2 Col3
1  A    B    C
2  D
3  E    F    G
4  H    I
5  J
 

И мне нужно что-то вроде этого:

 ID Col1
1  A
2  B
3  C
4  D
5  E
6  F
7  G
8  H
9  I
10 J
 

Количество столбцов в источнике не фиксировано, в некоторых строках может быть только 1 столбец, но в других может быть до 10, 11 и т. Д. Какие функции мне нужно применить для достижения результата?

Спасибо

Комментарии:

1. Вы не можете иметь строки из одной и той же таблицы с разным количеством столбцов? И является ли ваш так называемый «идентификатор» на самом деле просто номером строки? Потому что это, по-видимому, не согласуется с исходными данными.

2. Быстрый поиск в Google для «sql cols в строках» выдает «UNPIVOT»

Ответ №1:

Вы можете отказаться от использования cross apply , а затем заказать:

 select row_number() over (order by t.id, v.n) as new_id, v.col
from t cross apply
     (values (t.col1, 1), (t.col2, 2), (t.col3, 3)) v(col, n)
where v.col is not null
order by id, n