我在查询中使用了 3 个表:2 个带有INNER JOIN
个表,第三个表带有LEFT JOIN
个表。
但是,在执行LEFT JOIN
条件时,我得到了一些NULL
记录。有来自采购行(PL_表('不应该是这种情况。
任何人都可以建议更改查询以将记录中的NULL
值替换为实际值吗?
抱歉,我找不到任何附加示例表数据的选项。
查询
SELECT
pih.[PO Number],
pih.[Pre-Assigned No_] as [Invoice No],
pil.[Document No_],
pil.[Description] as [Reason For Discrepency],
pil.[Line No_],
pl.[No_] as [Item No],
pl.[Vendor Item No_],
pl.[Order Date],
pil.[Posting Date],
pil.[Expected Receipt Date],
pih.[Notes] as [Header Notes],
pil.[No_] as [G/L Account No],
pih.[Buy-from Vendor No_],
pih.[Buy-from Vendor Name],
Pil.Quantity as [Inv Qty From InvoiceLine],
pil.[Amount Including VAT] as [Inv Value From InvoiceLine],
pl.Quantity as [PO Quantity From Purchaseline],
pl.[Quantity Received] as [Received Qty From PurchaseLine],
pl.[Quantity Invoiced] as [Invoiced Qty From PurchaseLine] ,
pl.[Amount Including VAT] as [PO Value From PurchaseLine]
FROM
[Purch_ Inv_ Line] pil
INNER JOIN Purch_ Inv_ Header] pih
ON pil.[Document No_] = pih.[No_]
LEFT JOIN [Purchase Line] pl
ON pih.[PO Number]=pl.[Document No_] and pl.[Line No_]=pil.[Line No_]
WHERE
PIL.[Document No_] IN
(
SELECT distinct pil.[Document No_] FROM
Purch_ Inv_ Line] pil
WHERE piL.[No_] in ('700xxx','700xxx','17xxxxx') and pil.[Posting Date] >=getdate()-7
)
AND piL.[Type]='1'
获得NULL
值的原因可能有 2 个:
-
[采购行]表中的列值实际上是
NULL
-
对于
NULL
的行,[采购行]表中没有匹配的行。这就是左联的工作方式
如果只想获取匹配的行,请将LEFT JOIN
更改为INNER JOIN
- 但是,结果集将不包含 [Purch_ Inv_ 行] 和[Purch_ Inv_ 标题] 中没有匹配的行 [购买行] 行。
如果要为NULL
值提供默认值,可以使用ISNULL
ISNULL(pl.[Amount Including VAT], 0) as [PO Value From PurchaseLine]