如果结果符合某些条件,SQL 开发人员不会显示结果

问题描述 投票:0回答:1

我正在尝试进行 Oracle SQL Developer 查询以返回仅满足特定条件的项目。我面临的问题是一个项目可以有多个条件,并且根据这些条件我需要过滤掉结果。所以它需要某种数组或在选择中选择?

数据集如下所示:

商品编号 状况 日期
1234 A 9999-99-99
1234 B 9999-99-99
1234 B 9999-99-99
5555 A 9999-99-99
5555 B 2024-12-10

现在,仅当条件 B 日期不是 9999-99-99 或大于条件 A 日期时,我才需要返回没有分配给该项目的条件 B 的项目。

所以本质上项目 1234 不应该被返回,因为它有 2x 条件 B,日期等于条件 A,并且日期也是 9999-99-99。

项目 5555 应返回,因为即使它具有条件 B,但日期小于条件 A。

目前我有这个:

select ItemNo from DataSet where Condition not in 'B' and Date between :a and :b

我正在考虑创建一个查询来选择所有项目而不检查条件,然后可能将其嵌套到另一个选择中,该选择将检查每个项目是否有多个冲突条件,但不确定这是否是正确的方法。

sql oracle-sqldeveloper
1个回答
0
投票
  • ItemNo 不存在条件 B。
  • 或者,如果条件 B 确实存在,则其日期 (DateB) 不是 9999-12-31(任何其他日期),并且小于条件 A 的日期 (DateA)。

小提琴

SELECT ItemNo
FROM (
    SELECT 
        ItemNo,
        MAX(CASE WHEN Condition = 'A' THEN Date1 END) AS DateA,
        MAX(CASE WHEN Condition = 'B' THEN Date1 END) AS DateB
    FROM test
    GROUP BY ItemNo
) conditions
WHERE (
    (DateB IS NULL)  
    OR 
    (DateB != TO_DATE('9999-12-31', 'YYYY-MM-DD') AND DateB < DateA)  
);

输出

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.