Link EKPO-EBELP 和 G/L 个帐户

Link EKPO-EBELP and G/L accounts

我想知道哪个订单头寸(SAP MM 中 EKPO 的 EBELP)出现在哪个 G/L 账户中(HKONT 在 SAP FI 中的 BSEG 中,其中 koart = 'S')。

我在 redshift 数据库上使用 SQL 查询,该数据库具有从 SAP 复制的表。

好的,所以我在逐列浏览论坛和 SAP 表格几天后找到了答案...因为我主要对将订单头寸连接到 G/L 帐户感兴趣,所以我能够在可直接链接到 EKPO 的 EKKN 中找到它们。对于某些 ebelp,有多个 sakto,这就是为什么我们需要 "vproz" 才能将 EKPO-NETWR 划分为不同的 sakto。

经历所有这些也让我将我的问题从链接 EKPO 和 BSEG 转移到链接 EKPO-EBELP 和 G/L 帐户。 BSEG-HKONT(带滤波器到 BSEG-KOART = 'S')也在 EKKN-SAKTO 中。

SELECT ebeln, ebelp, netwr, sakto, vproz, vproz * netwr / 100 AS sakto_netwr
FROM ekpo
LEFT JOIN (
          SELECT
          mandt
          ,ebeln
          ,ebelp
          ,sakto
          ,SUM(vproz) as vproz
          FROM ekkn
          GROUP BY mandt, ebeln, ebelp, sakto
          )
          ekkn ON ekkn.mandt = ekpo.mandt AND ekkn.ebeln = ekpo.ebeln AND ekkn.ebelp = ekpo.ebelp

which has the tables copied from SAP.

如果您复制了 ALL table,您可以通过以下方式改进您的查询。

有一个很棒的table EKBE,它是订单文档历史,类似于EKPO中的所有订单数据。它包含订单号和相应的 material 文档号

EKBE:          MSEG:

BELNR   ->     MBLNR

GJAHR   ->     MJAHR

BUZEI   ->     ZEILE

这完全消除了您可怕的查询中 MSEG/MKPF 的需要。可能 SELECT 可以是:

SELECT ekbe.ebeln, ekbe.ebelp, bseg.hkont
  FROM ekbe
  LEFT JOIN bkpf ON bkpf.mandt = ekbe.mandt AND left(bkpf.awkey,10) = ekbe.belnr AND right(left(bkpf.awkey,14),4) = ekbe.gjahr AND bkpf.awtyp = 'RMRP'
  LEFT JOIN bseg ON bseg.mandt = bkpf.mandt AND bseg.bukrs = bkpf.bukrs AND bseg.gjahr = bkpf.gjahr AND bseg.belnr = bkpf.belnr

注意在JOIN中也要指定字段AWTYP,因为任何一个会计凭证在一年中都可以有很多material个不同类型的(AWKEY = <object number> + <year>).

此外,我不欣赏您在原始 SELECT 中加入 table 的顺序。通常源数据 table(在我们的例子中是 EKPO,因为我们正在为每个采购订单搜索帐户)放在第一位,所有其他数据都加入她。 但这是一个品味问题,也是一个你更了解的 Redshift 语法问题。