查询以过滤具有相同非主键值的行,然后从 Oracle 中的结果中排除具有另一个空列的记录

阿卡纳

表 Mytable 的示例数据

+----------+--------+----------+
|   BPT    |   BC   |    ST    |
+----------+--------+----------+
| NH       | AB360  | PTOTST   |
| MEMODMHF | AAAAA  | PTOTST   |
| NH       |        | PTOTST   |
| NH       |  ABH6G | PTOTSTCH |
| NH       |        |  PT01    |
| NH       | ABH6G  | PT04     |
| NH       |        | PT04     |
+----------+--------+----------+

过滤具有值 NH 的 BPT 列

+------+--------+----------+
| BPT  |   BC   |    ST    |
+------+--------+----------+
| NH   | AB360  | PTOTST   |
| NH   |        | PTOTST   |
| NH   |  ABH6G | PTOTSTCH |
| NH   |        |  PT01    |
| NH   | ABH6G  | PT04     |
| NH   |        | PT04     |
+------+--------+----------+

过滤值为空或 ABH6G 的 BC 列

+------+--------+----------+
| BPT  |   BC   |    ST    |
+------+--------+----------+
| NH   |        | PTOTST   |
| NH   |  ABH6G | PTOTSTCH |
| NH   |        |  PT01    |
| NH   | ABH6G  | PT04     |
| NH   |        | PT04     |
+------+--------+----------+

对于重复的 ST,排除 BC 为空的记录

+------+--------+----------+
| BPT  |   BC   |    ST    |
+------+--------+----------+
| NH   |        | PTOTST   |
| NH   |  ABH6G | PTOTSTCH |
| NH   |        |  PT01    |
| NH   | ABH6G  | PT04     |
+------+--------+----------+

下面提到的我的示例查询不起作用。如何实现这一点。

SELECT
  T1.BPT,
  T1.BC,
  T1.ST
FROM Mytable T1,
     Mytable T2
WHERE T1.BEN_PROD_TYP_CD IN ('NH')
AND ((T1.ST = T2.ST
AND T1.BC = 'ABH6G')
OR (T1.ST <> T2.ST
AND (T1.BC = 'ABH6G'
OR T1.BC IS NULL)));
扎鲁克

实现结果的一种方法是使用row_number()

select t.BPT, t.BC, t.ST from
(
select t1.*, row_number() over(partition by st order by BC asc) as rn 
from MyTable t1
where t1.BPT = 'NH'
and (t1.BC = 'ABH6G' or t1.BC is null)
) t
where t.rn = 1

结果:

+-----+-------+----------+
| BPT |  BC   |    ST    |
+-----+-------+----------+
| NH  | NULL  | PTOTST   |
| NH  | ABH6G | PTOTSTCH |
| NH  | NULL  | PT01     |
| NH  | ABH6G | PT04     |
+-----+-------+----------+

演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

ASP.NET MVC-附加类型为“ MODELNAME”的实体失败,因为相同类型的另一个实体已经具有相同的主键值

来自分类Dev

仅当另一个表中的所有外键都具有特定状态时才返回键值(ORACLE)

来自分类Dev

具有非主键值的FindAsync

来自分类Dev

检测oracle表中所有在每一行中具有相同值的列

来自分类Dev

Oracle:在更新具有多个列的表的一个字段时复制行

来自分类Dev

Oracle / SQL-查找具有一个不包含空值的值的记录

来自分类Dev

在Oracle中查询以获取具有主键信息的表中的列

来自分类Dev

在oracle中查询以从一个表中获取多个记录并输入另一个表

来自分类Dev

Oracle用另一个表中的主键值插入和替换值

来自分类Dev

查找与另一个数据框中的列具有相同的非唯一列值的数据框中的行

来自分类Dev

仅当另一个表中的所有外键都具有特定状态时才返回键值(ORACLE)

来自分类Dev

将具有标准值的另一个表的列中的所有记录插入到表中

来自分类Dev

更新具有另一个表ID的表中的记录

来自分类Dev

在另一个查询中排除查询结果

来自分类Dev

Oracle查询使用从另一个表获得的结果来获取特定表的结果

来自分类Dev

在Oracle中都有两个主键时,如何从另一个表插入到表中?

来自分类Dev

如何命名与Oracle中另一个表的列的记录相同的列

来自分类Dev

Oracle SQL查询表并根据结果从另一个表中删除

来自分类Dev

在Oracle中查询以获取具有主键信息的表中的列

来自分类Dev

MySql通过从另一个表中排除所有ID进行选择

来自分类Dev

如何在另一个表ssms中更新具有相同值的列?

来自分类Dev

具有空值的Oracle查询

来自分类Dev

在Oracle中针对另一个所有者访问函数?

来自分类Dev

使用具有特定条件的另一个表中的值更新Oracle中的表

来自分类Dev

具有行限制的Oracle Select查询

来自分类Dev

Oracle 11g 从另一个具有重复项的表插入

来自分类Dev

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

来自分类Dev

Oracle SQL 查询以检索列中的值等于另一个表中的值计数的记录

来自分类Dev

oracle SQL:选择不同的值,其中它的所有记录中不包含另一个特定值

Related 相关文章

  1. 1

    ASP.NET MVC-附加类型为“ MODELNAME”的实体失败,因为相同类型的另一个实体已经具有相同的主键值

  2. 2

    仅当另一个表中的所有外键都具有特定状态时才返回键值(ORACLE)

  3. 3

    具有非主键值的FindAsync

  4. 4

    检测oracle表中所有在每一行中具有相同值的列

  5. 5

    Oracle:在更新具有多个列的表的一个字段时复制行

  6. 6

    Oracle / SQL-查找具有一个不包含空值的值的记录

  7. 7

    在Oracle中查询以获取具有主键信息的表中的列

  8. 8

    在oracle中查询以从一个表中获取多个记录并输入另一个表

  9. 9

    Oracle用另一个表中的主键值插入和替换值

  10. 10

    查找与另一个数据框中的列具有相同的非唯一列值的数据框中的行

  11. 11

    仅当另一个表中的所有外键都具有特定状态时才返回键值(ORACLE)

  12. 12

    将具有标准值的另一个表的列中的所有记录插入到表中

  13. 13

    更新具有另一个表ID的表中的记录

  14. 14

    在另一个查询中排除查询结果

  15. 15

    Oracle查询使用从另一个表获得的结果来获取特定表的结果

  16. 16

    在Oracle中都有两个主键时,如何从另一个表插入到表中?

  17. 17

    如何命名与Oracle中另一个表的列的记录相同的列

  18. 18

    Oracle SQL查询表并根据结果从另一个表中删除

  19. 19

    在Oracle中查询以获取具有主键信息的表中的列

  20. 20

    MySql通过从另一个表中排除所有ID进行选择

  21. 21

    如何在另一个表ssms中更新具有相同值的列?

  22. 22

    具有空值的Oracle查询

  23. 23

    在Oracle中针对另一个所有者访问函数?

  24. 24

    使用具有特定条件的另一个表中的值更新Oracle中的表

  25. 25

    具有行限制的Oracle Select查询

  26. 26

    Oracle 11g 从另一个具有重复项的表插入

  27. 27

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

  28. 28

    Oracle SQL 查询以检索列中的值等于另一个表中的值计数的记录

  29. 29

    oracle SQL:选择不同的值,其中它的所有记录中不包含另一个特定值

热门标签

归档