加入发货后订单数量翻倍
Posted
技术标签:
【中文标题】加入发货后订单数量翻倍【英文标题】:Order Quantity Double after joining with delivery 【发布时间】:2018-11-12 16:37:20 【问题描述】:我们可以为单个订单项目进行多次交付。因此,当我将 Order-Item 与 Delivery 一起加入时,我得到了多行。现在,如果我想在 Order Item 级别(不包括 Delivery-Item)获取订单数量,我会得到错误的聚合。我理解为什么查询会这样,但不确定如何在每个可能的向下钻取级别使聚合正确。
Order Table
Deliver Table
After joining Order and Deliv
Result is Correct at Order ID,Item, Product level.
【问题讨论】:
在订单 ID、订单项目、产品级别它工作正常..但只有产品级别给了我错误的总和.. 您应该添加文本表架构 .. 数据样本、实际结果和预期结果 ..(不是仅链接到图像) 没有办法理解你想要什么。请提供预期的输出以及示例数据和尝试的查询——使用文本而不是图片。 我试图附加样本表、查询和预期结果,但它作为链接.. 我不明白你要聚合什么,我也不明白你说错了是什么意思。 【参考方案1】:这就是我解决这个问题的方法。从外观上看,您的桌子对我来说看起来并不正常。您在两个表中存在 ORD_ID 和 ORD_ITM。您应该只在您的 T_ORDER 表中存在这个,然后在您的 T_DELIV 表中存在 ORD_ITM。从您还显示的图表中,您没有 OrderItem_table,因此提供帮助会令人困惑。但是使用我的解决方案,只需将您的 ORD_ITM 仅作为交付表中的外键,然后通过此字段加入。希望这会有所帮助。
【讨论】:
拥有一个标准化数据库很好,但我不认为这会阻止此连接工作(目前)。 @AustinMullins 非规范化是性能问题的常见解决方案,尤其是在列存储上【参考方案2】:您提供的数据有问题
订单 10001 项目 30 的产品是一个表中的 P2 和另一个表中的 P3
能否请您提供以下格式的示例数据和表结构,以便其他人可以轻松帮助您
create column table T_ORDER (
ORD_ID int,
ORD_ITM int,
PROD varchar(5),
ORD_QTY int
);
create column table T_DELIV (
DELIV_ID int,
DELIV_ITM int,
ORD_ID int,
ORD_ITM int,
DELIV_QTY int,
PROD varchar(5)
);
insert into T_ORDER values (10001,10,'P1',50);
insert into T_ORDER values (10001,20,'P1',60);
insert into T_ORDER values (10001,30,'P2',40);
insert into T_ORDER values (10001,40,'P3',30);
insert into T_ORDER values (10002,50,'P4',20);
insert into T_DELIV values (50001,10,10001,10,20,'P1');
insert into T_DELIV values (50001,20,10001,10,30,'P1');
insert into T_DELIV values (50002,10,10001,20,60,'P2');
insert into T_DELIV values (50002,20,10001,30,30,'P3');
insert into T_DELIV values (50003,10,10001,40,10,'P3');
insert into T_DELIV values (50003,20,10001,40,15,'P3');
【讨论】:
@Eralper ...你是对的。交货表的产品价值有问题。这是多余的信息,所以不应该影响最终结果。基本上,我正在尝试构建一个 HANA 计算视图,但无法在可能的每个向下钻取级别上获得正确的聚合。 请提供上述INSERT命令的示例数据,论坛里的很多开发者都愿意尽快为您提供解决方案 Eralper- 您提供的插入语句非常适合生成示例数据。我能够通过再次将 Order 表中的 Order Quantity 添加到 Order-Deliv 连接的结果集中来解决它。无论用户在最终查询中选择什么字段,我唯一要做的就是将 Order_ID 和 Order_ITM 放在“分组依据”中。他们在 HANA 建模中做到这一点的方法是使用 "Keep Flag" 。感谢所有的帮助。以上是关于加入发货后订单数量翻倍的主要内容,如果未能解决你的问题,请参考以下文章