#sql #sql-server #rdbms
Вопрос:
В SQL Server моя структура таблиц выглядит следующим образом:
ОрдерИД | Идентификатор клиента | Серийно |
---|---|---|
58258 | 877 | OW13355-OW13356-OW13357-OW13358 |
58364 | 6 | OW13269-OW13270-OW13271-OW13272 |
58816 | 20315 | OW13940-OW13941-OW13942 |
59063 | 93085 | OW13676-OW13677-OW13678-OW13679 |
59114 | 16713 | OW12504-OW12505-OW12506 |
59519 | 470 | OW14361-OW14362-OW14363 |
59769 | 34820 | OW13928-OW13929-OW13930 |
60318 | 22424 | OW14081-OW14082-OW14083-OW14084-OW14085-OW14086 |
60318 | 22424 | OW14087-OW14088-OW14089 |
30858 | 16962 | EF 22567 9 |
8097 | 6 | OW76879 |
В serialNo
столбце иногда в строке вводится несколько серийных номеров. Я хочу извлечь все серийные номера, которые объединены по знаку, и создать новую строку. Каждая строка должна иметь только 1 серийный номер. Например, я хочу показать 4 записи для orderid = 58258
выбора.
Можно ли это сделать?
Результат должен быть
ОрдерИД | Идентификатор клиента | Серийно |
---|---|---|
58258 | 877 | OW13355 |
58258 | 877 | OW13356 |
58258 | 877 | OW13357 |
58258 | 877 | OW13358 |
Данная структура таблицы должна содержать 35 записей для 11 записей. Не могли бы вы, пожалуйста, помочь мне с запросом?
Я использую CHARINDEX
для поиска '-'
символа, но как найти несколько вхождений '-'
, а затем выбрать в качестве нескольких строк?
Комментарии:
1. Не помечайте спам тегами. Отметьте СУБД, которую вы используете, и только эту СУБД.
2. Для SQL server используйте STRING_SPLIT docs.microsoft.com/en-us/sql/t-sql/functions/…
Ответ №1:
SELECT OrderID, CustomerID, value
FROM Table1
CROSS APPLY STRING_SPLIT(SerialNo, '-');
Комментарии:
1. Спасибо за быстрый ответ
Ответ №2:
Используйте встроенную string_split
функцию!
select orderid, customerid, v.value SerialNo
from Table t
cross apply String_Split(t.SerialNo,'-') v
Комментарии:
1. Спасибо за быстрый ответ