Разбиение строки на таблицу по всему столбцу

#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). Мне нужно вывести таблицу в одном из двух следующих форматов:

  1. PersonID, RaceDescription как отношение «один ко многим»
  2. 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)   ',%';
  

SQL скрипка