【问题标题】:Unwanted Line Item in SQL QuerySQL 查询中不需要的行项目
【发布时间】:2020-09-04 09:57:41
【问题描述】:

这可能真的很简单,但我没有看到解决方案。在 SAP B1 中,我有一个服务调用,其中链接了多个销售订单。我只想要最近的销售订单的结果,但是它会将所有附加到它的销售订单中的所有订单项都扔给我。我可以在我的代码中看到它为什么这样做,但解决方案还没有出现在我面前。

我认为我可以通过使用 MAX(T4.DocNum) 并对选择信息进行分组来修复它,但这不仅不起作用,它还摆脱了我不想要的行之一。

代码;

SELECT T1."callID",T3."ItemCode", T3."Dscription", T3.DocEntry,T2.SrcvCallId,T3.Quantity,T4.DocNum
FROM OSCL T1
LEFT JOIN SCL4 T2 ON T1."callID" = T2."SrcvCallID"
INNER JOIN RDR1 T3 ON T2."Object" = T3."ObjType" AND T2."DocAbs" = T3."DocEntry" AND T2."Object" = '17'
INNER JOIN ORDR T4 ON T4.DocEntry = T3.DocEntry
WHERE T1.callID = 11255
ORDER BY T4.DocDate DESC

结果;

正如您看到的最后一个结果来自另一个关联的链接文档,我不希望它出现。

感谢您对此的任何帮助。

【问题讨论】:

  • 预期结果是什么?
  • 预期结果是除了最后一个具有不同 DocNum 的行之外的所有行(在这种情况下)。如果任何服务调用有多个这种类型的链接文档,则查询应仅生成来自该最近链接文档的所有行项目。

标签: sql sapb1


【解决方案1】:

看起来我想通了。以下解决方案适用于可能遇到此问题的其他任何人。

我在 RDR1 连接中添加了一个额外部分,以将 SCL4.DocPstDate 与似乎已完成工作的链接销售订单中的 MAX docdate 进行比较。

SELECT T1."callID",
T3."ItemCode" AS 'OrderCode', 
T3."Dscription" AS 'OrderDesc', 
T3.DocEntry,
T2.SrcvCallId,
T3.Quantity AS 'OrderQty',
T4.DocNum
FROM OSCL T1
LEFT JOIN SCL4 T2 ON T1."callID" = T2."SrcvCallID"
INNER JOIN RDR1 T3 ON T2."Object" = T3."ObjType" 
AND T2."DocAbs" = T3."DocEntry" 
AND T2."Object" = '17' 
AND T2.DocPstDate = 
(SELECT MAX(A.DocDate) FROM ORDR A 
INNER JOIN RDR1 B ON B.DocEntry = A.DocEntry 
INNER JOIN SCL4 C ON C.DocAbs = B.DocEntry AND C.Object = '17' 
WHERE C.SrcvCallID = T1.callID)
INNER JOIN ORDR T4 ON T4.DocEntry = T3.DocEntry
WHERE T1.callID = 11255
ORDER BY T4.DocDate DESC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 2016-01-05
    相关资源
    最近更新 更多