SAP Business One Hana:将Type24数据合并至Type13记录行的SQL需求
SAP Business One HANA: 合并发票(Type13)与对应付款(Type24)字段至同一行
核心思路
放弃原有的UNION ALL纵向拼接方式,通过表关联将付款记录的字段横向合并到对应发票行,利用LEFT JOIN确保所有发票记录都被保留(含未付款的发票)。
基础版SQL(单发票对应单付款场景)
SELECT -- 发票核心字段 inv.DocNum AS 发票编号, inv.DocDate AS 发票日期, inv.CardCode AS 客户代码, inv.CardName AS 客户名称, inv.DocTotal AS 发票金额, -- 关联付款字段(无付款则显示NULL) pay.DocDate AS 付款单据日期, pay.CheckNum AS 支票号, pay.DocTotal AS 付款金额 FROM OINV inv LEFT JOIN ORCT pay -- SAP B1中付款表ORCT通过BaseEntry/BaseType关联发票 ON pay.BaseEntry = inv.DocEntry AND pay.BaseType = 13 -- 13对应发票类型 WHERE inv.DocType = 13 -- 筛选发票记录
进阶版SQL(单发票对应多付款场景)
如果存在一个发票被多次付款的情况,可通过聚合函数合并付款信息:
SELECT inv.DocNum AS 发票编号, inv.DocDate AS 发票日期, inv.CardCode AS 客户代码, inv.CardName AS 客户名称, inv.DocTotal AS 发票金额, -- 合并所有关联支票号(逗号分隔) STRING_AGG(pay.CheckNum, ', ') AS 关联支票号列表, -- 计算总付款金额 SUM(pay.DocTotal) AS 累计付款金额, -- 取最后一次付款日期 MAX(pay.DocDate) AS 最后付款日期 FROM OINV inv LEFT JOIN ORCT pay ON pay.BaseEntry = inv.DocEntry AND pay.BaseType = 13 WHERE inv.DocType = 13 GROUP BY inv.DocNum, inv.DocDate, inv.CardCode, inv.CardName, inv.DocTotal
说明
- 表名
OINV为SAP B1的发票主表,ORCT为付款主表,若使用其他单据表需自行替换 - 关联条件需根据实际业务场景调整,确保付款记录与发票正确匹配
- 若需包含无对应发票的付款记录,可将
LEFT JOIN改为FULL JOIN
内容的提问来源于stack exchange,提问作者Brian Branco
相关产品推荐
相关产品推荐

