Присоединение к столбцу CSV в SQL Server

Привет, я делаю некоторые сообщения против устаревшей базы данных, и у меня немного мозговой пердит...

В основном существует 50 пользовательских критериев, которые были выполнены как столбец CSV, соответствующий таблице.

Так скажите столбец CC5 со значениями "2,6,7,12,8,3,13,1,5,11, '

против таблицы dbo.tbl_custom_code_5

со значениями

code   desc
 1     Wine
10     Diet Pepsi
11     Other Soft Drink
12     Coffee
13     Tea ....

И так оно и происходит... Поэтому мне нужно сделать группу/подсчитать что-то по строкам...

 Select [desc], COUNT(b.CC6)
 from dbo.tbl_custom_code_6 a
 INNER JOIN dbo.Respondent b ON a.code = b.CC6
 group by [desc]

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

 Select [desc], COUNT(b.CC6)
 from dbo.tbl_custom_code_6 a
 INNER JOIN dbo.Respondent b ON a.code like '%' + b.CC6 + ',%'
 group by [desc]

который не работает и не работает, даже если это произошло, потому что 6 появятся на 16 и т.д....

Я знаю, что должен быть лучший способ сделать это. Любые мысли?

Ответ 1

Попробуйте это (я полагаю, между запятыми и числами в данных csv не будет пробелов и т.д.):

SELECT [DESC], COUNT(b.CC6)
FROM dbo.tbl_custom_code_6 a
INNER JOIN dbo.Respondent b ON CHARINDEX(',' + a.code + ',', ',' + b.CC6) > 0
GROUP BY [DESC]

Ответ 2

Когда я столкнулся с аналогично денормализованной таблицей, я создал табличную функцию, которая токенизирует строку на основе запятых. Затем я просто написал что-то вроде этого:

SELECT [DESC], COUNT(b.CC6)
FROM dbo.tbl_custom_code_6 a
INNER JOIN dbo.Respondent b ON a.code IN (SELECT value FROM dbo.usf_SplitString(b.CC6))
GROUP BY [DESC]

Здесь вы можете найти аналогичную функцию .