我正在尝试从JDE(Oracle)中提取我们的项目管理器。此物料控制文件包含一些以代码作为值的列。这些代码存储在UDC表中。UDC表包含4列。前两个是带有代码的关键列。最后两个是代码的描述。现在我在Item Master中有一个列,其中包含一些代码。这些代码存储在UDC-Table中,其中UDC.C1 =“41”,UDC.C2 =“10”。不幸的是,UDC.C2之间包含前导空格。实际上它看起来是这样的:'10'。然后我有一个第二列的项目大师与额外的代码。这些代码存储在UDC中如下:UDC.C1 =“51”和UDC.C2 =“AB”。
我的问题/挑战是,我如何以优雅的方式将Item Master与UDC结合起来?我找到了这个SQL:
SELECT
IMLITM,
IMSRP1,
S1UDC.Desc1,
IMSRP2,
S2UDC.Desc1,
IMSRP3,
S3UDC.Desc1
FROM pooldba.F4101
LEFT JOIN pooldba.UDC('41','10') S1UDC ON IMSRP1 = S1UDC.UDC
LEFT JOIN pooldba.UDC('51','AB') S2UDC ON IMSRP2 = S2UDC.UDC
https://brandonkirsch.com/blog/index.php/2019/07/18/sql-jde-f0005-udc-helper/
不幸的是,它不起作用。我得到一个失败的SQL是假的。也许是因为('41','10')和前导空格?
1条答案
按热度按时间ufj5ltwl1#
问题1在JDE中,项目主数据为F4101,位于业务数据表中。UDC表为F0005,位于控制表中。
F4101可以使用pooldba.F4101找到,而F0005可以是poolctl.F0005。或者两者都是POOLDBA。
Issue 2我已经更改了您的第一个左连接,将pooldba.UDC('41','10')替换为来自F0005的子查询。因为SRP 1是3个字符,所以我使用SUBSTR从DRKY中删除了前导的7个空格。
SELECT IMLITM,IMSRP1,S1UDC.Desc1,IMSRP2,S2UDC.Desc1,IMSRP3,S3UDC.Desc1 FROM pooldba.F4101 LEFT JOIN(select substr(DRKY,8,3)as“UDC”,DRDL01 as“Desc1”from pooldba.F0005 where DRSY = '41' and DRRT = '10')S1UDC ON IMSRP1 = S1UDC.UDC LEFT JOIN pooldba.UDC('51','AB ')S2UDC ON IMSRP2 = S2UDC.UDC
第3期UDC 41/10实际上是6个字符,因此您无法将其与SRP 1匹配。
对于所有UDC,将SY/RT放入F0004将返回CDL。CDL可用于使您的SUBSTR更加灵活,例如:SUBSTR(DRKY、(10-CDL)、CDL)
表F0004,键(DTSY,DTRT)将返回DTCDL,这是