gpt4 book ai didi

mysql - 将根据另一列中的值忽略具有相同 ID 的记录的 SQL 查询

转载 作者:可可西里 更新时间:2023-11-01 07:55:41 25 4
gpt4 key购买 nike

* 更新*

经过进一步审查,我使用的表格也有一个 linenumber 列。请参阅下面更新的示例数据。我觉得这对解决这个问题非常有帮助……只是不确定如何解决。通过PO总结行号,如果等于1就是单行,如果大于1就是多行....这对我们有什么用吗?

这里是 SQL 的新手,所以请原谅我的无知。希望这是一个简单的答案。

希望构建 3 个类似的查询,这些查询将返回包含超过 1 个项目的采购订单,并且:

  1. 不包含批处理控制项目
  2. 包含所有批处理控制的项目
  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

查询 NO Lot Controlled items 效果很好...

    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`

我认为将 WHERE LOTCONTROLLED 更改为 = 1 一样简单,以获得包含所有批处理控制项目的采购订单,但这也会返回一些具有混合行的采购订单。

如果其中任何一行不受批处理控制,我如何才能将采购订单排除在外?

最佳答案

我喜欢在这里使用NOT EXISTS:

SELECT POD.*
FROM table1 POD
JOIN (SELECT PONUMBER
FROM table1 POD
WHERE NOT EXISTS (SELECT *
FROM table1 POD1
WHERE POD.PONUMBER = POD1.PONUMBER
AND POD1.LOTCONTROLLED = 1)
GROUP BY PONUMBER
HAVING COUNT(*) > 1
) POD1 ON POD.PONUMBER = POD1.PONUMBER

如果 PONUMBER 中的任何记录有 LOTCONTROLLED = 1 或 0,这将忽略结果中的 PONUMBER,具体取决于您输入的内容exists 子查询。

要仅获取具有混合的记录,您可以使用 COUNT().. HAVING:

SELECT PONUMBER,
ITEMNUMBER,
LOTCONTROLLED
FROM table1 POD
JOIN (SELECT PONUMBER
FROM table1
GROUP BY PONUMBER
HAVING COUNT(DISTINCT LOTCONTROLLED) = 2
) POD1 ON POD.PONUMBER = POD1.PONUMBER

关于mysql - 将根据另一列中的值忽略具有相同 ID 的记录的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52972971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com