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

如何在SQL Server中根据列值筛选行?附示例需求

动态筛选SQL Server行的解决方案

嘿,我来帮你搞定这个条件筛选的需求!根据你描述的逻辑——如果数据集里存在checkid=1且value=0的行,就只显示checkid=2的记录;如果不存在这类行,就显示checkid=1的记录,我给你整理了两种可行的SQL写法,都能实现目标。

方法一:用CASE语句简化逻辑

这种写法可读性更强,一眼就能理清逻辑分支:

WITH allData AS (
    SELECT mlid=1, value=0, checkid=1 
    UNION ALL 
    SELECT mlid=2, value=6, checkid=2 
    UNION ALL 
    SELECT mlid=3, value=6, checkid=1 
    UNION ALL 
    SELECT mlid=4, value=0, checkid=2 
)
SELECT * 
FROM allData
WHERE 
    CASE 
        -- 先判断是否存在触发条件的行
        WHEN EXISTS(SELECT 1 FROM allData WHERE checkid=1 AND value=0)
            THEN checkid=2  -- 存在则只取checkid=2的记录
            ELSE checkid=1  -- 不存在则取checkid=1的记录
    END

方法二:用逻辑运算符直接组合条件

如果你更喜欢直白的逻辑组合,也可以这么写,和上面的效果完全一致:

WITH allData AS (
    SELECT mlid=1, value=0, checkid=1 
    UNION ALL 
    SELECT mlid=2, value=6, checkid=2 
    UNION ALL 
    SELECT mlid=3, value=6, checkid=1 
    UNION ALL 
    SELECT mlid=4, value=0, checkid=2 
)
SELECT * 
FROM allData
WHERE 
    -- 存在目标行时,筛选checkid=2
    (EXISTS(SELECT 1 FROM allData WHERE checkid=1 AND value=0) AND checkid=2)
    OR
    -- 不存在目标行时,筛选checkid=1
    (NOT EXISTS(SELECT 1 FROM allData WHERE checkid=1 AND value=0) AND checkid=1)

结果验证

针对你给出的示例数据,因为确实存在mlid=1(checkid=1、value=0)的记录,所以查询会返回所有checkid=2的行:

mlid | value | checkid
-----|-------|--------
2    | 6     | 2
4    | 0     | 2

(注:你给出的期望结果里包含了mlid=3(checkid=1)的记录,这和你描述的筛选条件不符,可能是笔误哦~)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:43:11