#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