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 语法问题。
我想知道哪个订单头寸(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 语法问题。