2012-12-04 87 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表结构:表结构是如此简单。在事件表中,有customerid和incident_id。在客户表中,有customerid,new_areaid,new_partnersegment id。在Partnersegment表中,有new_partnersegmentid,new_name – user1875495

+0

尽管您的数据很简单,但没有与石油组合的棉兰糖。你是否想要每个石油和传统每个区域计数?或者你是否暗示“机场”是指石油和意外的数据样本。 – 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个数据。我想要的结果是4个数据,最后一个数据是添加0个数据。 – user1875495

+0

你确定存在从表C到表D的链接吗?这可能是问题所在。你能提供你正在使用的示例数据吗? –

+0

不,从表c到表D没有链接。链接在表B中。示例和结构数据位于上面。 – user1875495