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

时间:2013-02-11 18:35:04

标签: string sql-server-2008 count

架构:

SubscriberId NewsletterIdCsv 
------------ --------------- 
1     48,51,94     
2     43,22
3     33,11
4     90,61 

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

SELECT newsletteridcsv, len(newsletteridcsv) - len(replace(newsletteridcsv, ',', '')) +1 IndividualCount
FROM DBTABLE

这给了我结果:

NewsletterIdCsv IndividualCount
------------ --------------- 
48,51,94     3
43,22        2
33,11        2
90,61        2

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

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

获得总数的最佳方式是什么?

2 个答案:

答案 0 :(得分:8)

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

SELECT SUM(len(newsletteridcsv) - len(replace(newsletteridcsv, ',', '')) +1) 
    AS TotalCount
FROM DBTABLE

由于您只是要求总计数,因此您甚至不需要GROUP BY任何内容。

答案 1 :(得分:2)

你已经完成了棘手的部分(len减去逗号),现在只需运行一个:

SELECT sum(len(newsletteridcsv) - len(replace(newsletteridcsv, ',', '')) +1) as TotalCount
FROM DBTABLE