You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选包含至少一行isrequired或isreleased为1的分组数据?

解决方法

你的需求是获取所有id分组中,至少存在一行isrequired或isreleased为1的所有行。原查询的问题在于错误地将所有字段都加入了GROUP BY,导致无法对整个id分组进行判断。以下是几种可行的调整方案:

方案1:子查询筛选符合条件的ID后关联

先找出满足条件的id,再查询这些id对应的所有行:

SELECT id, name, isrequired, isreleased
FROM testtable
WHERE id IN (
    SELECT DISTINCT id
    FROM testtable
    WHERE isrequired = 1 OR isreleased = 1
);

方案2:使用EXISTS子查询

通过EXISTS判断当前行的id分组是否存在符合条件的记录:

SELECT t1.id, t1.name, t1.isrequired, t1.isreleased
FROM testtable t1
WHERE EXISTS (
    SELECT 1
    FROM testtable t2
    WHERE t2.id = t1.id
    AND (t2.isrequired = 1 OR t2.isreleased = 1)
);

方案3:窗口函数(适用于SQL Server 2012及以上版本)

用窗口函数计算每个id分组内是否存在符合条件的记录,再筛选结果:

SELECT id, name, isrequired, isreleased
FROM (
    SELECT 
        id, name, isrequired, isreleased,
        MAX(CASE WHEN isrequired =1 OR isreleased=1 THEN 1 ELSE 0 END) OVER (PARTITION BY id) AS has_valid_row
    FROM testtable
) AS sub
WHERE has_valid_row =1;

原查询问题分析

原语句中GROUP BY id, name, isrequired, isreleased会将每一行作为独立分组,HAVING条件只能判断当前行是否满足isrequired或isreleased为1,无法覆盖整个id分组的情况,因此无法得到预期结果。


内容的提问来源于stack exchange,提问作者Gauravsa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 04:57:15