SQL 逗号分隔字符串总数

问题描述 投票:0回答:3

架构:

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)?

注意:该表有 500 万条记录,我不认为使用临时表插入计数,然后最终遍历临时表行来累积计数是一种优化方法吗? 另外我完全反对使用游标来解决效率问题!

获取总计数的最佳方法是什么?

string sql-server-2008 count
3个回答
20
投票

您可以使用

SUM
将它们添加在一起:

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

由于您只是询问总数,因此您甚至不需要

GROUP BY
任何东西。


4
投票

您已经完成了棘手的部分(len 减去逗号),现在只需计算其总和:

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

0
投票

更改函数 [dbo].[CountDelimited] (@Str varchar(8000),@Delimiter nvarchar(1)) 返回 varchar(8000) AS 开始 声明@Result int if (@Str ='' 或 @Str 为空) 开始 设置@Result = 0 结尾 别的 开始 设置@Result = (选择 SUM(len(@Str) - len(replace(@Str, @Delimiter, '')) +1)) 结尾 返回@结果 结束

© www.soinside.com 2019 - 2024. All rights reserved.