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

2020-09-19 08:12发布

         点击此处--->   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子句的地方? 我该如何应用?

         点击此处--->   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条回答
bbpeas
1楼-- · 2020-09-19 08:51

嗨,Pia,

您是对的,TOP 1将为您提供所需的东西,但是请注意,在这种情况下,您需要将其与ORDER BY子句结合使用

选择前1名
        T0。[CardCode]
      ,T0。[CardName]
      ,T2。[名称]
      ,T2。[E_MailL]
      ,T0。[DocDate]
      ,T0。[DocNum]
      ,T1。[ItemCode]
      ,T1。[说明]
 从OINV T0
      内联接INV1 T1在T0上。[DocEntry] = T1。[DocEntry]
      T0.CntctCode = T2.CntctCode上的内部联接OCPR T2
      T0.CardCode = T3.CardCode的内联接OCRD T3
 T3。[CardFName] ='[%0]'和T1。[Dscription]类似于'%[%2]%'
 T0。[DocDate] DESC的订单,T0。[DocNum] DESC的订单
/*使用DESC(DESCending)将结果从大到小排序。
    默认值为ASC(ASCending),您不必显式
    写。  */

此致

Johan

SAP小菜
2楼-- · 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

哎,真难
3楼-- · 2020-09-19 08:50

请参阅Johan的答案

但使用:ORDER BY T0.DocEntry DESC:代替:ORDERBY T0。[DocDate] DESC,T0。[DocNum] DESC

如果您有多个系列,则文档编号不能是最高编号。

lukcy2020
4楼-- · 2020-09-19 08:45

感谢Teun的提示! 我也尝试过,只返回了一条记录。 希望查询返回每个客户匹配的最后发票。

打个大熊猫
5楼-- · 2020-09-19 08:45

嗨,

尝试此查询,

选择T0。[CardCode],T0。[CardName],T0。[DocNum],T1。[DocEntry],T0。[DocDate],T1。[ItemCode],T1。[Dscription],T1。[Quantity ] from OINV T0内连接INV1 T1在T0上。[DocEntry] = T1。[DocEntry]内连接OCRD T2在T0上。[CardCode] = T2。[CardCode] W0位置T0。[DocNum] IN(选择MAX(Ta.Docnum )从OINV Ta,其中Ta.Cardcode = T0.Cardcode)ORDER BY T0。[CardCode]

此致

Nagarajan

一周热门 更多>