SQL逗号分隔的字符串总计数

Mur*_*dvi 5 string count sql-server-2008

架构:

SubscriberId NewsletterIdCsv 
------------ --------------- 
1     48,51,94     
2     43,22
3     33,11
4     90,61 
Run Code Online (Sandbox Code Playgroud)

我需要获取每行NewsletterIdCsv的计数,然后添加所有行以获得所有行的总计数,对于基本行计数我正在执行以下操作:

SELECT newsletteridcsv, len(newsletteridcsv) - len(replace(newsletteridcsv, ',', '')) +1 IndividualCount
FROM DBTABLE
Run Code Online (Sandbox Code Playgroud)

这给了我结果:

NewsletterIdCsv IndividualCount
------------ --------------- 
48,51,94     3
43,22        2
33,11        2
90,61        2
Run Code Online (Sandbox Code Playgroud)

如何获得总计数(在此示例9中)?

注意:这个表有5百万条记录,我不认为使用临时表来插入计数然后最后通过临时表行来累积计数是一种优化方式?另外,我完全反对使用游标来提高效率!

获得总数最好的方法是什么?

Lit*_*les 8

您可以使用SUM它们一起添加:

SELECT SUM(len(newsletteridcsv) - len(replace(newsletteridcsv, ',', '')) +1) 
    AS TotalCount
FROM DBTABLE
Run Code Online (Sandbox Code Playgroud)

既然你只是要求总数,你甚至不需要GROUP BY任何东西.