*更新*
经过进一步检查,我正在使用的表也有一个linenumber
列。请参阅下面的更新的示例数据。我觉得这可能对解决这个问题非常有帮助。用PO对行号求和,如果等于1,则为单行;如果大于1,则为多行....对我们有什么作用?
这是SQL的新功能,请原谅我的无知。希望这是一个简单的答案。
希望建立3个类似的查询,这些查询将返回包含多个项目的采购订单,并且:
数据看起来像这样...
PONUMBER ITEMNUMBER LOTCONTROLLED LINENUMBER
PO1.18 OSC1024 0 1
PO1.18 OSC1025 0 2
PO1.18 OSC1026 0 3
PO1.2 OSC1199 0 1
PO1.2 OSC1200 1 2
PO1.21 OSC1201 1 1
PO1.21 OSC1202 1 2
PO1.22 OSC1203 1 1
PO1.23 OSC1204 1 1
PO1.23 OSC1205 0 2
PO1.24 OSC1206 1 1
PO1.24 OSC1207 1 2
PO1.24 OSC1300 0 3
查询没有批次控制的项目效果很好...
SELECT
`POD`.`PONUMBER`,
`POD`.`ITEMNUMBER`,
`POD`.`LOTCONTROLLED`
FROM
table1 AS `POD`
INNER JOIN
(
SELECT `PONUMBER`, COUNT(`PONUMBER`)
FROM table1
WHERE `LOTCONTROLLED` = 0
GROUP BY `PONUMBER`
HAVING (COUNT(`PONUMBER`) > 1)
) as `POD1`
ON `POD`.`PONUMBER` = `POD1`.`PONUMBER`
我认为将a更改WHERE LOTCONTROLLED
为= 1来获得具有所有批次控制项目的采购订单很简单,但是这也会返回一些混合了行的采购订单。
如果其中任一行不受批次控制,如何排除采购订单?
窗口函数是最简单的方法,但是您可能没有。所以,仅仅使用min()
和max()
的lotcontrolled
。基本查询是:
select pod.*
from table1 pod join
(select ponumber, min(lotcontrolled) as min_lc, max(lotcontrolled) as max_lc
from table1 pod
group by ponumber
having count(*) > 1
) p
using (ponumber)
那么您的三个条件是:
max_lc = 0 -- no lot controlled
min_lc = 1 -- all lot controlled
min_lc <> max_lc -- mixed
有些人可能更喜欢冗长的版本:
min_lc = max_lc and max_lc = 0 -- no lot controlled
min_lc = max_lc and max_lc = 1 -- all lot controlled
min_lc <> max_lc -- mixed
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句