0

我正在使用左连接来组合两个表。它们是SOP10100SOP10106

合并两张表后,我必须得到两张发票(行)。现在我收到四张发票(行)。

你能看看我的查询并指出我在哪里犯了错误吗?

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'

在此处输入图像描述

4

1 回答 1

1

soptype在 invoice 表中匹配表中的两条记录userdef。您会看到对于每张发票,您有两个不同的Winsys. 您想将哪一张与您的发票相关联?该问题的答案必须包含在您的查询逻辑中。

例如,您可能想要MAX(Winsys)(在您的情况下,MAX(CASE ... END) as Winsys)。只要您没有指定当左连接中的多个记录与您选择的表匹配时如何聚合值,您就会收到所有组合。

当您提出正确的汇总时,您还需要GROUP BY从发票表中选择的字段。

有两条记录SOP10106相同可能是错误的soptype。如果是这种情况,只需更正它,您将不会有重复。

于 2012-12-04T11:16:43.100 回答