如何在 SAP HANA 数据库中的两个表之间进行单位转换

How to do conversion of units between two tables in SAP HANA Database

您好,我偶然发现了 SAP HANA 数据库的一些问题,请注意。我有一些玩具示例问题。我试图提出解决方案,但我无法弄清楚。 我有两个 table,其中一个 Volume table

Row MATERIAL    BASE_UOM    PERIOD  SUMMAND
1   55555        KG         201106     99
2   55555        KG         201204     16
3   55555        KG         201301     71
4   55555        KG         201411     83
5   55555        KG         201509     21
6   55555        PAL        201510     64
7   55555        PAL        201511     69
8   55555        KG         201512     55
9   55555        ZRS        201601     81
10  55555        KG         201602     3
11  55555        KG         201603     74
12  55555        KG         201604     58
13  55555        ZRS        201605     8
14  55555        KG         201606     22

第二个table是转换Table

Row MATERIAL    UNIT    BASE_UOM    UOMN1D     UOMZ1D    Conversion Rate
1   55555        KG        KG        1          1            1
2   55555        CSE       KG        1,000.00   2,016.00    2.016
3   55555        ST        KG        1,000.00   56          0.056
4   55555        LAY       KG        100        3,024.00    30.24
5   55555        PAL       KG        100        54,432.00   544.32
6   55555        ZDK       KG        59,778.00  54,432.00   0.910569106
7   55555        ZSE       KG        59,778.00  54,432.00   0.910569106
8   55555        ZNO       KG        59,778.00  54,432.00   0.910569106
9   55555        ZFI       KG        59,778.00  54,432.00   0.910569106
10  55555        ZRV       KG        1,000.00   57          0.057
11  55555        ZRS       KG        1,000.00   2,052.00    2.052

请记住行列是指示性的!

tables 之间的键是 MATERIAL 列。

BASE_UOM 中没有 KG 时,我想转换列 SUMMAND(体积 table) 中的所有字段 卷 table 例如第 6 行是 PAL 到 KG 或第 13 行 ZRS 到 KG。如果我们处于有 KG 的情况,我们不需要更新列 SUMMAND。要将 PAL 转换为 KG,我需要查看 Conversion Table at MATERIALUNIT 列(查找 PAL 字段)并从 Conversion Rate 列获取第 5 行 (UOMZ1D/UOMN1D) 544.32*64 (64 来自 Volume table row 6 Column SUMMAND)等等。最后,每个人 MATERIAL 都有自己的转化率。

音量 table 的最终输出应该如下所示。第 6、7、9、13 行已正确更新。

Row MATERIAL    BASE_UOM    PERIOD  SUMMAND
1   55555        KG         201106    99
2   55555        KG         201204    16
3   55555        KG         201301    71
4   55555        KG         201411    83
5   55555        KG         201509    21
6   55555        PAL        201510    34836.48
7   55555        PAL        201511    37558.08
8   55555        KG         201512    55
9   55555        ZRS        201601    166.212
10  55555        KG         201602    3
11  55555        KG         201603    74
12  55555        KG         201604    58
13  55555        ZRS        201605    16.416
14  55555        KG         201606    22

我如何检查每一个可能的组合以将这两个 table 之间的所有单位转换为 KG。想建议我如何缩放它,如果我在 UNIT 和 BASE_UOM 之间有更长的列表转换来自 转换 Table 想象像 90 种独特的可能组合。我需要构建什么 SQL 查询才能获得所需的输出。欢迎任何类型的解决方案。

根据您的描述,您可能希望使用 内部联接 将转换因子与 material 相匹配。

大致如下:

SELECT
     v.MATERIAL
   , v.BASE_UOM as ORIGINAL_UOM
   , v.PERIOD
   , c.UNIT  as TARGET_OUM
   , (c.UOMZ1D/c.UOMN1D) * v.SUMMAND as SUMMAND_TARGET_OUM

FROM 
            VOLUMES v
INNER JOIN CONVERSION c
ON (v.MATERIAL, v.BASE_UOM) 
 = (c.MATERIAL, c.UNIT)

此查询依赖于每个可能的 material/base_uom 组合在转换 table 中只有一个匹配条目。 如果找不到匹配项,则输出中将省略 VOLUMES 中的相应记录。

显然可以设计这种对缺失数据更具弹性的方法(例如,通过 fall-back 未更改数据的输出或传递查找),但给定的解决方案是直接的,易于理解和调试。

请注意,这 使用 SAP HANA 的 built-in unit-of-measure 转换函数。由于这些旨在复制基于 SAP NetWeaver 的应用程序的 UOM 转换逻辑,因此在这种情况下这些可能不是您想要的。