查询语法帮助以显示最近的发票

2020-09-19 08:12发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)选择T0。[CardCode],...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


选择T0。[CardCode],T0。[CardName],T2。[Name],T2。[E_MailL],T0。[DocDate],T0。[DocNum],T1。[ItemCode],T1。[Dscription  ]来自OINV T0内联接INV1 T1接通T0。[DocEntry] = T1。[DocEntry]内联接OCPR T2接通T0.CntctCode = T2.CntctCode内联接OCRD T3接通T0.CardCode = T3.CardCode WHERE T3。[CardFName]  ='[%0]'和T1。[说明]喜欢'%[%2]%'

您好,大师,此查询有效,但是我只想显示每个客户的最后一张发票。 SAP和sql的新手,但是我相信这是您使用DISTINCT和TOP子句的地方? 我该如何应用?

5条回答
SAP小菜
2020-09-19 08:49

Hi Pia,

当查询返回的结果少于预期时,通常是由于WHERE子句或INNER联接,有时两者都有。

找出错误地限制结果集的最佳方法是查看原始结果,您希望该结果会显示在经过调整的查询中。

除此之外,这是两个测试,第一个测试是查看问题是否在联接中,另一个是查看是否在WHERE子句中:

----------------------

 SELECT T3。[CardCode]
      ,T3。[CardName]
      ,T0.DocNum
      -,T2。[名称]
      -,T2。[E_MailL]
      ,T0。[DocDate]
      ,T0。[DocNum]
      ,T1。[ItemCode]
      ,T1。[说明]
 从OCRD T3
      内联接OINV T0 ON T3.CardCode = T0.CardCode
                        AND T0.DocEntry =
                        (选择h.DocEntry
                         来自OINV h
                         其中h.CardCode = T3.CardCode
                           和h.DocEntry =(选择MAX(DocEntry)
                                             来自OINV,其中CardCode = T3.CardCode))
      内联接INV1 T1在T0上。[DocEntry] = T1。[DocEntry]
      --INNER JOIN OCPR T2在T0.CntctCode = T2.CntctCode
 T3。[CardFName] ='[%0]'
   AND T1。[说明]喜欢'%[%2]%'
 按T0.DocNum,T1.Dscription排序

----------------------

 SELECT T3。[CardCode]
      ,T3。[CardName]
      ,T0.DocNum
      ,T2。[名称]
      ,T2。[E_MailL]
      ,T0。[DocDate]
      ,T0。[DocNum]
      ,T1。[ItemCode]
      ,T1。[说明]
 从OCRD T3
      内联接OINV T0 ON T3.CardCode = T0.CardCode
                      /*您可以在多个字段上联接表*/
                        AND T0.DocEntry =
                      /*子查询可以以多种不同方式使用。
                           在这种情况下,可以在JOIN子句中
                           仅返回一个值,即最新的DocEntry */
                        (选择h.DocEntry
                         来自OINV h
                         其中h.CardCode = T3.CardCode
                       /*子查询也可以在where子句中使用,
                            甚至在子查询中 */
                           和h.DocEntry =(选择MAX(DocEntry)
                                               /* MAX函数返回
                                                    给定的最大值
                                                    领域。 你猜对了
                                                    也是MIN函数*/
                                             来自OINV,其中CardCode = T3.CardCode))
      内联接INV1 T1在T0上。[DocEntry] = T1。[DocEntry]
      T0.CntctCode = T2.CntctCode上的内部联接OCPR T2
/* WHERE T3。[CardFName] ='[%0]'
   AND T1。[说明]如'%[%2]%'*/
 按T0.DocNum,T1.Dscription排序

----------------------

现在,如果此方法不起作用,我们将不得不再次查看该查询。

此致

Johan

一周热门 更多>