SQL 如果在分组或分区后未找到列值,则从 table 中过滤掉记录

SQL to filter out records from a table if a column value is not found after grouping or partitioning

我有一个 table,它有 3 列 AccountNumber Memberid Status,一个帐号将有多个 memberids 与之关联,状态为 "A" Active 或 "C" Closed,我的输出应该只是那些至少有 1 个活跃成员的账号,如果甚至没有一个活跃成员那么我不希望我的输出中有那个账号,请记住,如果一个账号有多个关闭并且至少有 1 个活跃我想要我输出中的所有这些记录。 DBMS 是 DB2,但我可以调整一下。

SELECT * FROM [tablename]
WHERE [AccountNumber] IN (
    SELECT [AccountNumber] FROM [tablename]
    WHERE [status] = 'c'
)

您可以通过 group byhaving 子句获得帐号(这似乎是您想要的):

select accountnumber
from table t
group by accountnumber
having sum(case when status = 'a' then 1 else 0 end) > 0;

having 子句简单地计算组中条件为真的行数。 > 0 表示至少有一名活跃成员。