首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >行值不一致

行值不一致
EN

Stack Overflow用户
提问于 2013-02-01 22:20:16
回答 1查看 46关注 0票数 0

场景-我们有包项,它被定义为一个或多个项目的组合。复杂包是一个包含多个组件项的包。复杂包项的每个组件项应该链接到相同数量的位置。

例如,:Pack P1有组件C1C2C3。每个项目C1C2C3都位于10个位置1,2. 10,这样C1-1C1-2、.、C1-10C2-1C2-2、.、C2-10C3-1C3-2、……、C3-10存在。在这种情况下,pack项P1也被关联到位置1到10,如P1-1P1-2、.、P1-10

PACK_BREAKOUT包含包组件映射,表ITEM_LOCATION包含项到位置关联。包和组件都被视为“项”,并将存在于ITEM_LOCATION中。

理想情况下,对于上述场景,下面的记录集是有效的。

代码语言:javascript
复制
PACK_NO    ITEM    NO_OF_LOC
--------   ------  -------------
P1         C1      10
P1         C2      10
P1         C3      10

下面有一个查询,它返回所有这些包项的结果,如上面所示。

代码语言:javascript
复制
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;

然而,也有一些不一致的结果,如pack no。在下面的P2、P4和P5中,组件与相同数量的位置没有关联。

代码语言:javascript
复制
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有不同数量的组件)。

我只想得到的包,其组件的位置并不都是一致的。所以想要的结果是-

代码语言:javascript
复制
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)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-01 22:24:08

您希望使用另一个带有group by子句的having

代码语言:javascript
复制
select pack_no
from (select c.pack_no, c.item, count(a.loc ) as numlocs
      from item_location a join
           pack_breakout c
           on c.item=a.item
      group by c.pack_no, c.item
     ) p
group by pack_no
having MIN(numlocs) <> MAX(numlocs)

这会把包还回来。

如果您想要这些数字的详细信息,那么使用解析函数进行计算:

代码语言:javascript
复制
select pi.*
from (select pi.*, min(numlocs) over (partition by pack_no) as minnumlocs,
             max(numlocs) over (partition by packno) as maxnumlocs
      from (select c.pack_no, c.item, count(a.loc ) as numlocs
            from item_location a join
                 pack_breakout c
                 on c.item=a.item
            group by c.pack_no, c.item
           ) pi
     ) pi
where minnumlocs <> maxnumlocs
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14656007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档