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 对。
我有以下情况:
我想要实现的是 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 对。