2013-04-22 155 views
0

表图案具有以下值的单柱:逗号分隔值计数

NewsletteridPattern 
------------ 
%50% 
%51% 

表B具有以下的值:

SubscriberId NewsletterIdCsv 
------------ ----------------- 
47421584  51 
45551047  50,51 
925606902 50 
47775985  51  

我有以下查询基本上计数逗号分隔值通过使用模式:

SELECT * 
FROM TABLEB t WITH (nolock) 
JOIN Patterns p ON (t.NewsletteridPattern LIKE p.pattern) 

问题是,计数是不正确的,例如,我的模式有%50%和%51%,因此表B中的第2行应计为两次,但是我的查询只有一次,我该如何反应?

编辑:
我忘了,我这是导致该问题的原始查询添加DISTINCT:

SELECT Count(Distinct Subscriberid) 
FROM TABLEB t WITH (nolock) 
JOIN Patterns p ON (t.NewsletteridPattern LIKE p.pattern) 
+0

此查询正确计数行 - 看到这个演示 - http://sqlfiddle.com/#!3/b9cd3/4 – Taryn 2013-04-22 17:09:46

回答

1

我嘲笑你的数据,例如:

create table #pattern (pattern varchar(50)) 

insert into #pattern values ('%50%') 
insert into #pattern values ('%51%') 

create table #subscriber (id varchar(50), newsletter varchar(50)) 

insert into #subscriber values ('47421584', '51') 
insert into #subscriber values ('45551047', '50,51') 
insert into #subscriber values ('925606902', '50') 
insert into #subscriber values ('47775985', '51') 

SELECT pattern, COUNT(*) AS Counter 
FROM #subscriber t WITH (nolock) 
    JOIN #pattern p ON (t.newsletter LIKE p.pattern) 
GROUP BY pattern 

而我的选择声明返回:

pattern Counter 
------- ------- 
%50%  2 

%51%  3 

你最终的目标是什么?你只关心按模式计算行数,还是试图按模式选择行?

+0

我更新了我的问题,并删除不同的是答案本身形成计数。谢谢 ! – 2013-04-22 19:57:30