2012-12-04 4 views
1

내가 가지고있는 여러 테이블을쿼리 정보

표 사고 예상

incident_id | Customer_name 
01   | AAA 
02   | BBB 
03   | CCC 
04   | DDD 

표 고객

Customer_name | Area_Name | Segment_Name 
AAA   | JAKARTA | PETROLEUM 
BBB   | MEDAN  | TRADITIONAL 
CCC   | JAKARTA | TRADITIONAL 
DDD   | MEDAN  | AIRPORT 

테이블 영역

Area_Name | Phone 
JAKARTA | 021 
MEDAN  | 022 

결과를 필요 :

Area | Segment  | Number (count from Incident tabel) 
JAKARTA | PETROLEUM | 1 
MEDAN | TRADITIONAL | 1 
JAKARTA | TRADITIONAL | 1 
MEDAN | PETROLEUM | 0 

어떤 도움 당신이 항상 영역 및 세그먼트 권리를 원하는 나타납니다

+1

PLZ 데이터 –

+0

@RahulVasantraoKamble 테이블의 구조를 제공하는 것이다 : 테이블 구조는 매우 단순하다. Incident 테이블에는 customerid와 incident_id가 있습니다. 고객 테이블에는 customerid, new_areaid, new_partnersegment id가 있습니다. Partnersegment 테이블에는 new_partnersegmentid, new_name이 있습니다. – user1875495

+0

단순하지만 Medan과 Petroleum 조합은 없습니다. 한 지역에 대해 석유 및 전통에 대한 집계를 얻으려고하십니까? 아니면 "공항"은 석유와 우발적 인 데이터 샘플을 의미합니다. – DRapp

답변

0

도움이 될 것인가?

SELECT c.new_name, d.new_SegmentName, ISNULL(COUNT(a.CustomerId),0) as jumlah 
    FROM filterednew_area c LEFT JOIN filteredaccount b ON b.new_AreaId = c.new_areaId 
    LEFT JOIN filterednew_partnersegment d ON b.new_PartnerSegmentId = d.new_partnersegmentId 
    LEFT JOIN filteredIncident a ON a.CustomerId = b.AccountId 
    WHERE MONTH(a.new_trxdate) = '10' AND YEAR(a.new_trxdate) = '2012' 
    AND c.new_areaid IN ('3C26906E-5C13-E211-8D39-005056850007','4E26906E-5C13-E211-8D39-005056850007') 
    GROUP BY c.new_name, d.new_SegmentName 

항상 영역을 원할 경우 참여를 시작해야합니다.
이 쿼리를 사용해보십시오.

편집 : 편집 후 테이블 솔루션

select C.Area_Name, C.Segment_Name, ISNULL(count(I.incident_id), 0) 
from customer C left outer join incident I 
on C.Customer_name = I.Customer_Name 
group by C.Area_Name, C.Segment_Name 

편집 2 :

이 작업을 수행하려면 카티 제품에 해결책 나는 가능한 세그먼트와 테이블 세그먼트이 상상 (그리고 난 이 종류의 테이블이 첫 번째 쿼리에 있다고 생각하십시오.)

SELECT A.Area_Name, A.Segment_name, Count(Incident.Incident_Id) AS TOT 
FROM 
(
(SELECT Distinct Customer.Area_Name, Segment.Segment_name 
FROM Segment, Customer 
) AS A 
LEFT OUTER JOIN Customer AS C 
ON (C.Area_Name = A.Area_Name) AND (C.Segment_name = A.Segment_name) 
) 
LEFT OUTER JOIN Incident ON C.Customer_Name = Incident.Customer_name 
GROUP BY A.Area_Name, A.Segment_name; 

쿼리의 결과

Area_Name | Segment_name | TOT 

JAKARTA | AIRPORT  | 0 
JAKARTA | PETROLEUM | 1 
JAKARTA | TRADITIONAL | 1 
MEDAN  | AIRPORT  | 1 
MEDAN  | PETROLEUM | 0 
MEDAN  | TRADITIONAL | 1 
+0

당신의 쿼리는 내가 시도 할 때 여전히 동일합니다. 결과는 여전히 3 개의 데이터입니다. 내가 원한 결과는 마지막 데이터가 0 데이터를 추가하는 4 개의 데이터에 대한 결과입니다. – user1875495

+0

테이블 C에서 테이블 D로 연결되는 링크가 있습니까? 그것은 아마 문제 일 것입니다. 이 용도로 사용하는 예제 데이터를 제공 할 수 있습니까? –

+0

아니요, 테이블 c에서 테이블 D까지의 링크가 없습니다. 링크는 테이블 B를 통과합니다. 예제 및 구조상 데이터는 위에 있습니다. – user1875495

관련 문제