2012-12-04 185 views
0

我正在使用左連接來組合兩個表。他們是SOP10100SOP10106左加入SQL

組合兩張表後,我必須得到兩張發票(行)。現在我得到四張發票(行)。

你能看我的查詢並指出我犯錯的地方嗎?

Select 
    DISTINCT DETAIL.SOPNUMBE as Invoice, 
    DETAIL.DOCDATE as Date, 
    DETAIL.CUSTNMBR as 'Customer Id', 
    DETAIL.CUSTNAME as Customer_Name, 
    DETAIL.SUBTOTAL as Sub_Total, 
    DETAIL.FRTAMNT as Freight, 
    DETAIL.TAXAMNT as Tax, 
    DETAIL.DOCAMNT AS 'Doc_Amount', 
    CASE when USRDEF05 <> ' ' THEN USRDEF05 ELSE '0'END as Winsys 
FROM SOP10100 DETAIL 
Left JOIN SOP10106 USERDEF 
ON USERDEF.soptype = DETAIL.soptype 
WHERE BACHNUMB ='WINSYS112012' 

enter image description here

+0

我沒有得到任何錯誤。但是我的輸出重複的值。請你看看我的屏幕截圖。 – Kavitha

回答

1

soptype發票表匹配的userdef表中的兩個記錄。您會看到每張發票都有兩種不同的Winsys。您想與您的發票關聯哪一個?這個問題的答案必須納入你的查詢的邏輯。

例如,您可能想要MAX(Winsys)(在您的情況下,MAX(CASE ... END) as Winsys)。只要您在左連接中的多個記錄與您選擇的表格匹配時未指定要如何彙總值,您就會收到所有組合。

當您想出適當的彙總時,您還需要GROUP BY您從發票表中選擇的字段。

SOP10106中有兩個記錄可能有相同的soptype錯誤。如果是這種情況,只需糾正該問題,並且不會有重複。