#sql #sql-server #string #replace #string-split
#sql #sql-сервер #строка #заменить #разбиение
Вопрос:
У меня есть две таблицы, первая, dbo.QuestionaireResponse включает столбцы PersonID (int not null), applicationId (int not null) и RaceIDs . PersonID — это базовый столбец идентификаторов, но RaceIDs — это varchar(255), который содержит строки идентификаторов, разделенные запятыми (плохой дизайн, который я знаю). Другая таблица — это таблица dbo типа.Гонка с двумя столбцами, RaceID (идентификатор int) и RaceDescription (какой-то varchar). Мне нужно вывести таблицу в одном из двух следующих форматов:
- PersonID, RaceDescription как отношение «один ко многим»
- PersonID, RaceDescriptions (строка значений, разделенных запятыми, из столбца описания гонки)
В своих исследованиях я наткнулся на этот пост http://ole.michelsen.dk/blog/split-string-to-table-using-transact-sql / но это не совсем соответствует задаче, потому что разделение должно быть предварительно сформировано для каждой записи в столбце.
В итоге я передал таблицу типов веб-сервису в дополнение к данным, но мне любопытно, есть ли другое жизнеспособное решение. В этом случае важна производительность, хотя таблица типов имеет небольшое количество записей.
Любые предложения о том, как это сделать в sql server?
Ответ №1:
Попробуйте это:
SELECT q.PersonID, r.RaceDescription
FROM dbo.QuestionaireResponse q JOIN dbo.Race r
ON ',' q.RaceIDs ',' LIKE '%,' CONVERT(varchar(10),r.RaceID) ',%';