【问题标题】:What join columns should I take for ACDOCA and JVSO1 SAP tables?我应该为 ACDOCA 和 JVSO1 SAP 表采用哪些连接列?
【发布时间】:2023-01-31 20:44:52
【问题描述】:

我已将两个 SAP ERP 表提取到 Azure Synapse 中:ACDOCAJVSO1

现在我需要加入这两个表。并且列 EBELN 需要处于连接条件,而且两个表都有大约 40% 的 EBELN 是空的。由于这些空值,这两个表会产生大量数据(单位:十亿)。

我尝试了什么:我又选择了一列 EBELP 并根据这两列加入了两个表:

WHERE ACDOCA.EBELN = JVSO1.EBELN AND ACDOCA.EBELP = JVSO1.EBELP

但即使在这种情况下,我也会得到很多数据。

我想要的是:

我想加入这两个表并拥有更少的数据量(不是十亿)。您能否建议我在两个表中添加更多列,以便我可以使用较少的数据正确连接两个表。

谢谢

【问题讨论】:

  • 您实际上需要哪些数据来自两个表的公共数据或来自一个表的公共数据以及来自另一个表的所有数据?
  • @PratikLad 我想要两个表中的公共数据
  • 如果 40% 的 EBELN 为空,那么添加 EBELP 列作为连接条件会有什么帮助?您也在条件之间加入 and 运算符。这将如何帮助处理空的 EBELN 数据?
  • 您加入表所基于的列,如果它具有空值或空值,则加入条件将跳过这些行。

标签: azure-synapse sap-erp


【解决方案1】:

加盟条件 on acdoca.ebeln=JVSO1.ebeln and acdoca.ebelp=JVSO1.ebelpon acdoca.ebeln=JVSO1.ebeln 将为具有空值的行提供相同的结果。我用示例数据重现了这一点。

输入数据具有空值:

ebeln EBELP
null A
AA AA
null B

基于 ebeln 字段连接表:

select * from acdoca full outer join JVSO1 on 
acdoca.ebeln=JVSO1.ebeln 

基于 ebeln 和 ebelp 字段连接表:

select * from acdoca full outer join JVSO1 on 
acdoca.ebeln=JVSO1.ebeln and acdoca.ebelp=JVSO1.ebelp

  • 只要ebeln字段为空,查询就应该这样写,条件应该是匹配ebelp字段表的连接应该发生。
select * from acdoca full outer join JVSO1 
on
(acdoca.ebeln is not null and acdoca.ebeln=JVSO1.ebeln) 
or 
(acdoca.ebeln is null and acdoca.ebelp=JVSO1.ebelp)

或者

select * from acdoca full outer join JVSO1 on 
(isnull(acdoca.ebeln,acdoca.ebelp) =
isnull(JVSO1.ebeln,JVSO1.ebelp)) 

即使您添加其他匹配列,加入条件也应该像上面的查询一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-08
    • 2017-08-11
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 2012-10-12
    • 2019-05-31
    • 2011-08-07
    相关资源
    最近更新 更多