嗨,我正在做一些针对遗留数据库的报道,而且我有一点脑屁......
基本上有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会出现等等......
我知道必须有更好的方法来做到这一点。有什么想法吗?
答案 0 :(得分:9)
试试这个(我假设之间没有任何空格等,以及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]
答案 1 :(得分:3)
当我遇到类似的非规范化表时,我创建了一个表值函数,它基于逗号对字符串进行标记。然后我写了这样的东西:
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]
您可以找到类似的功能here。