SAP HANA - 如何使用左横向连接

问题描述 投票:0回答:1

SAP 业务一号 | HANA 版本:2.0 SPS05

我正在尝试查询所有供应商及其上次采购订单的

DocNum
DocDate

具有 CTE 和窗函数:

WITH Last_PO AS (
 SELECT 
  "CardCode", "DocNum", "DocDate"
  ,ROW_NUMBER() OVER (PARTITION BY "CardCode" ORDER BY "DocEntry" DESC) row_num
 FROM OPOR
 WHERE "CANCELED" = 'N'
)

SELECT
 OCRD."CardCode"
 ,OCRD."CardName"
 ,Last_PO."DocNum" AS "Last PO"
 ,Last_PO."DocDate" AS "Last PO Date"
FROM
 OCRD LEFT JOIN Last_PO on Last_PO.row_num = 1 AND Last_PO."CardCode" = OCRD."CardCode"
WHERE
 OCRD."CardType" = 'S'
ORDER BY
 OCRD."CardCode"

尝试使用 LATERAL join 时,出现错误

incorrect syntax near "WHERE"
:

SELECT
 OCRD."CardCode"
 ,OCRD."CardName"
 ,Last_PO."DocNum" AS "Last PO"
 ,Last_PO."DocDate" AS "Last PO Date"
FROM
 OCRD LEFT JOIN LATERAL (
  SELECT "DocNum", "DocDate"
  FROM OPOR 
  WHERE "CANCELED" = 'N' AND "CardCode" = OCRD."CardCode"
  ORDER BY "DocEntry" DESC
  LIMIT 1
) Last_PO ON TRUE
WHERE
 OCRD."CardType" = 'S'
ORDER BY
 OCRD."CardCode"

我发现了这个评论,所以也许这个功能从来没有正常工作过:

文档的链接将带您到最新版本(2.0 SP07 in 2023)但是later_table_expression的描述还没有出现 自SPS 05版本以来。您可以更改版本来查看它。文档 声明它应该与 LEFT OUTER JOIN 一起使用,但我无法得到 接受除交叉连接语法之外的任何内容。我想知道这是不是一个 即将悄然消失的功能。

sql hana sapb1
1个回答
0
投票

我可以通过改变 ON 条件来实现这一点,但与 CTE 版本相比,它的速度非常慢。我只能访问 B1 应用程序本身,因此无法对其进行分析,但执行需要 3-5 秒,而 CTE 版本是即时的。

SELECT
 OCRD."CardCode"
 ,OCRD."CardName"
 ,Last_PO."DocNum" AS "Last PO"
 ,Last_PO."DocDate" AS "Last PO Date"
FROM
 OCRD LEFT JOIN LATERAL (
  SELECT "CardCode", "DocNum", "DocDate"
  FROM OPOR 
  WHERE "CANCELED" = 'N' AND "CardCode" = OCRD."CardCode"
  ORDER BY "DocEntry" DESC
  LIMIT 1
) Last_PO ON Last_PO."CardCode" = OCRD."CardCode"
WHERE
 OCRD."CardType" = 'S'
ORDER BY
 OCRD."CardCode"
© www.soinside.com 2019 - 2024. All rights reserved.