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

1 回答 1

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

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

于 2013-04-22T17:13:48.443 回答