加入SQL Server中的CSV列

时间:2011-07-15 02:18:08

标签: sql sql-server tsql

嗨,我正在做一些针对遗留数据库的报道,而且我有一点脑屁......

基本上有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会出现等等......

我知道必须有更好的方法来做到这一点。有什么想法吗?

2 个答案:

答案 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