2015-03-31 112 views
0

我是新來的疑問,所以原諒我的無知。左外部加入和簡單加入3個表內

臨時表#all包含三列:cod,cust_name,end_date。這個表格有2500行。當下面的查詢運行時,我沒有得到所有的代碼,但它給了我大約400行。

對於HCS_Dtl和HCIS_Hd表:總會有一個匹配行兩個

SELECT p.cod, count(d.FormNo), SUM(d.NetAmt) 
    FROM #all p left outer join HCS_Dtl d on p.cod=d.Code 
     join HCIS_Hd h on d.FormNo=h.FormNo 
    WHERE 
    h.TimeStmp between '2015-03-01 00:00:00' and '2015-03-28 23:59:59' 
    GROUP BY p.cod 

我需要我從那些#ALL 2500行,即使他們沒有在這段時間內的表單我在查詢的where子句中提到。這怎麼可能?

我使用的,如果你想在#ALL全行然後取出其中的條件,然後加入SQL Server 2008 R2的

+0

使用LEFT JOIN意味着它作爲內部聯接「加入HCIS_Hd h on d.FormNo = h.FormNo'將它作爲左連接 – mohan111 2015-03-31 11:46:42

+0

@ mohan111對不起,我沒有明白你的意思。你的意思是我改變了嗎? FROM p.cod = d.Code FROM #all p left outer join HCS_Dtl d d.FormNo = h。 '2015-03-01 00:00:00'和'2015-03-28 23:59:59'之間的FormNo和h.TimeStmp' GROUP BY p.cod – xaahir 2015-03-31 18:04:47

回答

0

嘗試在表HCIS_Hd

SELECT p.cod, count(d.FormNo), SUM(d.NetAmt) 
FROM #all p left outer join HCS_Dtl d on p.cod=d.Code 
    LEFT JOIN HCIS_Hd h on d.FormNo=h.FormNo 
WHERE 
h.TimeStmp between '2015-03-01 00:00:00' and '2015-03-28 23:59:59' 
GROUP BY p.cod 
+0

這將返回與實際查詢相同數量的行題 – xaahir 2015-03-31 17:35:03