【发布时间】:2013-02-02 06:24:08
【问题描述】:
场景 - 我们有包装项目,它被定义为一个或多个项目的组合。一个复杂的包是一个包含多个组件项目的包。复杂包装项目的每个组件项目都应链接到相同数量的位置。
例如:
包P1 具有组件C1、C2 和C3。每个项目 C1,C2 和 C3 的范围为 10 个位置 1,2....10,这样 C1-1,C1-2,...,C1-10,C2-1,@ 987654332@,...,C2-10,和C3-1,C3-2,...,C3-10 存在。在这种情况下,包装项目 P1 也与位置 1 到 10 相关联,如 P1-1,P1-2,...,P1-10。
PACK_BREAKOUT 表包含 Pack 组件映射,ITEM_LOCATION 表包含与位置关联的项目。 Pack 和 Component 都被视为“项目”,将存在于 ITEM_LOCATION 中。
理想情况下,对于像上面这样的场景,下面的记录集是有效的
PACK_NO ITEM NO_OF_LOC
-------- ------ -------------
P1 C1 10
P1 C2 10
P1 C3 10
我有下面的查询,它返回所有此类包装物品的上述结果。
select c.pack_no,c.item,count(a.loc )
from item_location a, pack_breakout c
where c.item=a.item
group by c.pack_no,c.item
order by 1,2;
但是,有一些不一致的结果,例如包装编号。 P2 、 P4 和 P5 下面的组件不与相同数量的位置关联。
PACK_NO ITEM NO_OF_LOC
-------- ------ -------------
P1 C1 10
P1 C2 10
P1 C3 10
P2 C1 11
P2 C2 5
P2 C3 9
P2 C4 11
P3 C1 21
P3 C2 21
P3 C3 21
P3 C4 21
P3 C5 21
P4 C1 10
P4 C2 15
P5 C1 10
P5 C2 9
P5 C3 10
P5 C4 10
请注意,一个包可以有 n 个组件(如您所见 P1, P2, P3, P4, and P5 有不同数量的组件)。
我只想获取组件位置不一致的包。所以想要的结果集是-
PACK_NO ITEM NO_OF_LOC
-------- ------ -------------
P2 C1 11
P2 C2 5
P2 C3 9
P2 C4 11
P4 C1 10
P4 C2 15
P5 C1 10
P5 C2 9
P5 C3 10
P5 C4 10
请注意,即使一个组件不匹配 no。作为包中其他组件的位置,必须将整个包视为不一致(如P5)。
【问题讨论】: