如何在 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 MATERIAL 和 UNIT 列(查找 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 转换逻辑,因此在这种情况下这些可能不是您想要的。
您好,我偶然发现了 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 MATERIAL 和 UNIT 列(查找 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 转换逻辑,因此在这种情况下这些可能不是您想要的。