2013-04-22 3 views
0

표 패턴은 다음의 값과 하나의 열 보유 카운트 분리쉼표 값

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

를 I가 기본적 콤마 구분 값을 계산하는 다음의 질의 패턴을 사용하여 :

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

답변

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

내 질문을 업데이트하고 별개를 제거하는 것은 그 자체가 답을 형성하는 것이 었습니다. 감사 ! –