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

时间:2019-05-09 11:27:54

标签: sql database select sap hana

您好,我偶然发现 SAP HANA数据库的某些问题。我有一些玩具示例问题。我试图提出解决方案,但我不知道。 我有两个表音量表

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

第二个表是转化表

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

请记住,“行”列是指示性的!

表之间的键是“材料”列。

BASE_UOM 音量表中没有KG时,我想转换 SUMMAND(音量表)列中的所有字段,例如第6行中的PAL进入KG,第13行中的ZRS进入KG。如果我们有KG,则不需要更新列 SUMMAND 。要将PAL转换为KG,我需要查看材料 UNIT 列的转换表(查找PAL字段),并从中获取第5行转化率列( UOMZ1D / UOMN1D )544.32 * 64(64来自音量表行6列 SUMMAND ) 等等。最后,每个材料都有自己的转化率。

音量表的最终输出应如下所示。第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

在这两个表之间,如何检查所有可能的组合以将所有单位转换为KG。如果我要从转换表中的UNIT和BASE_UOM之间进行较长的列表转换,想建议我如何缩放它,可以想象有90种可能的组合。我需要构建什么SQL查询才能实现所需的输出。欢迎任何解决方案。

1 个答案:

答案 0 :(得分:1)

根据您的描述,您可能希望使用内部连接将转化因子与材料进行匹配。

与此类似:

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组合只有一个匹配条目。 如果找不到匹配项,则VOLUMES中的相应记录将在输出中被忽略。

显然可以设计出对丢失数据更具弹性的方法(例如,通过回退输出未更改的数据或进行传递查找),但是给定的解决方案非常简单,易于理解和调试。

请注意,它使用SAP HANA的内置度量单位转换功能。由于这些文件旨在复制基于SAP NetWeaver的应用程序的UOM转换逻辑,因此在这种情况下,可能不是您想要的。