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

瑞安·卡哈特(Ryan Carhart)

*更新*

经过进一步检查,我正在使用的表也有一个linenumber列。请参阅下面的更新的示例数据。我觉得这可能对解决这个问题非常有帮助。用PO对行号求和,如果等于1,则为单行;如果大于1,则为多行....对我们有什么作用?

这是SQL的新功能,请原谅我的无知。希望这是一个简单的答案。

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

  1. 不含批次控制物品
  2. 包含所有批次控制项目
  3. 包含批次控制和非批次控制项目的MIX

数据看起来像这样...

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据pyspark中另一列的值编辑具有相同id的列的所有行的值

MySQL 查询一列中具有相同值而另一列中具有不同值的行

sql:使用单个查询在另一列中选择具有相同列值的行

选择在列中具有相同值而在另一列中具有不同值的记录

根据具有多个记录的表中另一列的不同值添加值

SQL查询以选择记录在其中一列中值为= 0且在另一列中具有唯一ID的行

Pandas - 根据后一列中是否存在值过滤一列中具有相同值和另一列中多个值的行

删除r中另一列中具有相同ID但值不同的行

SQL / Postgres:查找具有相同值的元组(对于另一列中的给定值)

如果另一列在SQL Server中相同,则获取具有最小列值的行

在另一列的同一表中具有相同值的SQL组项目

运行查询,在该查询中显示在两列中具有重复值的记录,但在另一列中具有不同记录的记录

如何根据另一列 SQL 中的值创建具有计数值的新列

在具有相同ID pyspark数据框的另一列中显示不同的值

SQL查询以选择在同一列中具有不同值的子记录的父项

我在熊猫数据框中有两列。一列具有相同的值(id),另一列中具有对应的值的票证数

sql查询以选择两列中具有相同id但不同值的记录

根据另一列的值提取一列的所有行(SQL 查询)

Pyspark:如何为另一列中具有相同值的所有行设置相同的 id?

如何在一个列中查找具有相同值但在另一列中具有不同值的记录

查找一列中具有相同值而另一列中具有其他值的行?

选择在一列中具有相同值而在另一列中具有不同值的行

在另一列中选择具有相同 id 但相同值的行

根据另一列中的相同值将值分配给该列

在多行的一列中查找具有相同值的行,而另一列具有不同的值

一列中具有相同值的行,将另一列中的所有值求和,并显示1行

如果2条记录具有相同的列值,如何在按另一列对其进行排序之后按id升序对记录进行排序?-滑轨

从表中选择所有行,除了具有相同 id 的另一个表中的行在另一列中具有特定值

如何将一列中的值复制到R中另一列中具有相同值的行?