常にエリアとセグメントが必要なようですね。
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
EDIT 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