SQL Select 声明:如果有一个匹配项,则显示所有匹配项

SQL Select Statement for: If there is one match, then show them all

我有以下情况:

我想要实现的是 SQL-标准语句,它为我提供了 "AAA" / "BBB" 的每一行和日期(分组依据)与第 4 列中的 IS NOT NULL 的单个匹配项。另一方面,如果每行的第 4 列中与 IS NOT NULL 匹配,则其中 none 个。每一行都与 IS NULL 匹配。

输出应该是:

希望大家明白我的意思?

谢谢大家!

编辑: 尝试了 isaace 的解决方案并进行了一些编辑,它对我有用:

SELECT DISTINCT a.* FROM TABLE a
INNER JOIN
(
SELECT COL_1, COL_2 FROM TABLE WHERE COL_4 is null
) b ON a.COL_1 = b.COL_1 AND a.COL_2 = b.COL_2

由于您的修改,我删除了之前的回答。我希望我答对了你的问题。

select a.* from table a
join
(
    select col1, colb from table where col3 is null
 ) b on a.col1 = b.col1 and a.col2 = b.col2

嗯。如果我没理解错的话,你可以使用window函数:

select col1, col2, col3, col4
from (select t.*,
             sum(case when col4 = 'XXX' then 1 else 0 end) over (partition by col1, col)
      from t
     ) t
where col4 is null or cnt = 1;

这将删除具有多个 "XXX" 列的 col1/col2 对。