2012-05-16 2 views
2

나는 2 개의 테이블에서 계산을 얻으려고하고 있는데 고생하고있다.하나의 문장에서 2 개의 다른 열의 수를 얻는다.

노트북 항목이있는 테이블, 연락처 링크가있는 테이블, 연락처를 클라이언트에 연결하는 테이블 및 클라이언트를 주소와 연결하는 테이블이 있습니다. 내가하려는 일은 각 우편 번호가 연락처 및 클라이언트별로 메일로 분류 된 횟수를 알아내는 것입니다.

Postcode | Count of Clients | Count of Contacts  
UB | 123 | 12345  
HA | 223 | 22345 

하지만 분명히 연락처와 클라이언트 모두에서 동일한 수를 얻고 있습니다. 나는 항상 오류가 발생하므로 중첩 된 select 문에 넣으려고 할 때 끔찍하게 혼란스러워 지므로 어떤 도움을 주셔서 감사합니다!

select COUNT (DISTINCT ni.NotebookItemId) AS Clients, 
COUNT(DISTINCT nl.ObjectId) AS Contacts, 
Substring(ad.PostCode, 1, 2) AS Postcode 
... 

그런 다음 각 필드에 고유 한 값의 두 수를 얻을 것이다 COUNT(DISTINCT thing) 즉 : : 앤드류 당신이 후 수 있습니다 말한대로

select COUNT (ni.NotebookItemId) AS Clients, 
COUNT(nl.ObjectId) AS Contacts, 
Substring(ad.PostCode, 1, 2) AS Postcode 
from NotebookItems ni 
inner join notebooklinks nl on ni.NotebookItemId = nl.NotebookItemId 
inner join ClientContacts cc on cc.ContactPersonId = nl.ObjectId 
inner join address ad on ad.ObjectId = cc.ClientId 
where NotebookTypeId = 75 AND ni.CreatedOn > 'mar 16 2012' 
AND (ad.postcode like 'UB%' or 
    ad.postcode like 'HA%') 
GROUP BY Substring(ad.PostCode, 1, 2) 
order by Contacts desc 
+1

당신은 COUNT (DISTINCT 것) 뒤에있을 수 있습니다 .. – Andrew

답변

1

카운트(), 모든 비 널 (null) 행을 계산합니다.

나는 이것이 당신이 원하는 것인지 확신하지 못합니다. 당신은 말합니다 :

제가하려는 것은 각 우편 번호가 연락처와 클라이언트별로 그룹화 된 을 몇 번이나 발견했는지 확인하는 것입니다.

나는이 같은 데이터를 쿼리 기대 :

SELECT 
     Count(MailshotID) AS Count 
    , Substring(address.PostCode, 1, 2) AS Postcode 
    , ContactID 
    , ClientID 
FROM 
    -- your joined tables here 
WHERE 
    -- your criteria here 
GROUP BY 
     Substring(address.PostCode, 1, 2) 
    , ContactID 
    , ClientID 

을 얻으려면 '각 우편 번호, 연락처 및 클라이언트에 대한'mailshots의 카운트가

Count Postcode ContactID ClientID 
3  UB   201  301 
6  HA   202  302 
2  UB   203  305 
18  UB   203  306 

어느 나 '우편 번호, 연락처 및 고객별로 그룹화'.

+0

그건 속일 수있는 것처럼 보입니다! – franglais

관련 문제