使用左联接分组

时间:2019-12-06 15:50:20

标签: sql db2

我无法在查询中创建group by子句。 我正在从DB2服务器提取数据。

select 

lqbin# as Location,
lqpart as Part#,
lqlot# as Batch,
lqqtyh as Qty,
lqunit as UOM

from binfxp

left join binb on lqbin# = bm4binn and lqpart = bm4part

where lqplnt = 'GC'

我试图找到位于多个位置的零件,我得到了多个结果,因为有些零件具有不同的批号和不同的数量。

我正在尝试按位置和零件号分组,如果我必须省略批次,数量和UOM,那很好。 这样,我可以找出多个位置的零件编号,以便对其进行合并。

我已经附上一张零件编号的结果图片。

enter image description here

我想看

enter image description here

3 个答案:

答案 0 :(得分:0)

很难猜出您期望在输出中看到什么,因为除了11X3 bn70之外,您没有使用过其他任何部件。检查下面的查询,如果不能按预期运行,请扩展示例数据,并相应地输出数据。

select 
      lqbin# as Location,
      lqpart as Part
from binfxp
left join binb on lqbin# = bm4binn and lqpart = bm4part
where lqplnt = 'GC'
group by lqpart, lqbin# 

答案 1 :(得分:0)

我不确定我是否理解你的意思,但是常规的分组依据应该提供所要求的结果-像这样

select 

lqbin# as Location,
lqpart as Part#,
count(*)

from binfxp
left join binb on lqbin# = bm4binn and lqpart = bm4part
where lqplnt = 'GC'
GROUP BY Location, Part#

使用count(*),您还将获得额外的出现次数。

答案 2 :(得分:0)

  

我正在尝试查找多个位置的零件

这使我想到了这样的查询:

select lqpart, min(lqbin#), max(lqbin#)
from binfxp join
     binb
     on lqbin# = bm4binn and lqpart = bm4part
where lqplnt = 'GC'
group by lqpart
having min(lqbin#) <> max(lqbin#) ;

不需要left join。实际上,join不是必需的,因为您有两列,两个表中都有一列。如果指定了哪些列位于哪些表中,则查询可以进一步简化。