HANA 2.0 SPS05中如何正确使用LEFT LATERAL JOIN?
SAP Business One HANA 2.0 SPS05 供应商最后采购订单查询问题
基础信息
- 环境:SAP Business One | HANA 版本:2.0 SPS05
- 需求:查询所有供应商及其最后一张采购订单的订单编号(DocNum)和订单日期(DocDate)
问题说明
使用CTE结合窗口函数可正常实现该查询,但尝试通过LEFT LATERAL JOIN实现时,会触发错误:incorrect syntax near "WHERE"。根据相关评论,LATERAL JOIN特性的文档在HANA 2.0 SPS05版本后不再提供,推测该版本的该功能存在兼容性问题。
可行实现方案(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"
报错的LEFT LATERAL JOIN实现方案
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"
内容的提问来源于stack exchange,提问作者Bangaio
相关产品推荐
相关产品推荐

