我想知道哪个订单位置(EBELP从EKPO在SAP MM)出现在哪个G/L帐户(HKONT在BSEG在SAP FI与koart = 'S')。
我正在处理一个redshift数据库上的SQL查询,该数据库的表是从SAP复制的。
发布于 2019-11-07 14:28:41
好吧,几天后我找到了答案,一列一列地浏览了论坛和SAP表格.由于我主要感兴趣的是连接订单立场到付款/信用证帐户,我能够找到他们在EKKN是直接连接到EKPO。对于一些ebelp,有多个sakto,这就是为什么我们需要"vproz“才能将EKPO划分成不同的sakto。
所有这些都让我把我的问题从连接EKPO和BSEG转移到连接EKPO-EBELP和G/L帐户。(带滤波器到= 'S')也在中.
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发布于 2019-11-08 04:17:31
,它具有从SAP复制的表。
如果您复制了ALL表,则可以以下列方式改进查询。
有一个很棒的表EKBE,它是订单文档历史,类似于EKPO中的所有订单数据。它既包含订单编号,也包含相应的材料文档编号。
EKBE: MSEG:
BELNR -> MBLNR
GJAHR -> MJAHR
BUZEI -> ZEILE这完全消除了在可怕的查询中使用MSEG/MKPF的需要。可能的选择可以如下:
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请注意,字段AWTYP也应该在JOIN中指定,因为任何会计文档在一年中都可以有许多不同类型的材料(AWKEY = <object number> + <year>)。
另外,我也不欣赏您在原始选择中加入表的顺序。通常,源数据表(在我们的例子中是EKPO,因为我们正在为每个采购订单搜索帐户)首先被放入,所有其他的连接到她。但这是一个品味的问题,也是一个红移语法的问题,你知道的更多。
https://stackoverflow.com/questions/58748624
复制相似问题