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

У меня есть две таблицы, первая, dbo.QuestionaireResponse, включает столбцы PersonID (int не null), ApplicationID (int не null) и RaceID. PersonID - это базовый столбец идентификатора, но RaceIDs - это varchar (255), который содержит строки идентификаторов с разделителями-запятыми (плохой дизайн, который я знаю). Другая таблица представляет собой таблицу типов dbo.Race с двумя столбцами: RaceID (int identity) и RaceDescription (какой-то varchar). Мне нужно вывести таблицу в одном из двух следующих форматов:

  1. PersonID, RaceDescription как отношение один ко многим
  2. PersonID, RaceDescriptions (строка значений, разделенных запятыми, из столбца описания расы)

В своем исследовании я наткнулся на этот пост http://ole.michelsen.dk/blog/split-string-to-table-using-transact-sql/, но это не совсем подходит для проблемы, потому что разделение должно выполняться для каждой записи в столбце.

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

Любые предложения о том, как это сделать на сервере sql?


person dragoncmd    schedule 17.06.2014    source источник


Ответы (1)


Попробуй это:

SELECT q.PersonID, r.RaceDescription
FROM dbo.QuestionaireResponse q JOIN dbo.Race r 
ON ',' + q.RaceIDs + ','  LIKE  '%,' + CONVERT(varchar(10),r.RaceID) + ',%';

скрипт SQL

person MinhD    schedule 17.06.2014