You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 21:18:20