Sql server 不等于在SQL查询中不起作用

Sql server 不等于在SQL查询中不起作用,sql-server,tsql,Sql Server,Tsql,我试图在Sql中使用“notequal”命令,但它似乎不起作用。我想在所有3个字段(status1、status2和status3)都不等于Yes时获取总计数。由于某种原因,我得到了0条记录 SELECT COUNT(ID) from [maintable] WHERE status1 <> 'YES' and status2 <> 'YES' and status3 <> 'YES' 选择 来自[maintable]的计数

我试图在Sql中使用“notequal”命令,但它似乎不起作用。我想在所有3个字段(status1、status2和status3)都不等于Yes时获取总计数。由于某种原因,我得到了0条记录

SELECT
    COUNT(ID) from [maintable]
WHERE 
    status1 <> 'YES'
    and status2 <> 'YES'
    and status3 <> 'YES'
选择
来自[maintable]的计数(ID)
哪里
状态1“是”
状态2“是”
状态3“是”
上述查询不会生成任何结果。我做错了什么?谢谢

试试这个:

SELECT
    COUNT(ID) from [maintable]
WHERE
    COALESCE(status1, '') <> 'YES'
    AND COALESCE(status2, '') <> 'YES'
    AND COALESCE(status3, '') <> 'YES'
选择
来自[maintable]的计数(ID)
哪里
合并(状态1),“是”
和合并(状态2),“是”
和合并(状态3),“是”
null
值不是
“是”
,它们是未定义的

尝试使用Exception

SELECT
    COUNT(ID) from [maintable]
EXCEPT
SELECT
    COUNT(ID) from [maintable]
WHERE 
    status1 = 'YES'
    and status2 = 'YES'
    and status3 = 'YES'
选择
来自[maintable]的计数(ID)
哪里
NVL(状态1,“否”)“是”
NVL合并(状态2,'否')'是'
NVL合并(状态3,'否')'是'

我们可以将nvl用于空案例

这些字段的类型是什么,它们是否可以为空?您能提供一些示例数据吗?正如@TimSchmelter所提到的,如果这些元组为NULL,那么与NULL的相等比较是不可预测的。需要处理。蒂姆,我运行qry时仍然没有收到任何数据。请。我刚刚添加了一张图片,显示了当我运行select语句时我的表的样子。thnxTim的问题很好。如果数据样本是表中的所有数据,则可以不获取任何数据,因为没有符合where的记录clause@user1858332-您希望从该样本数据返回哪些行?也许您需要
而不是
@MaksymStrukov:Btw,这是您的示例数据,是的,它不会返回记录:。但这是有道理的,因为即使最后一行的
status3
也是“YES”,因此它也不会返回。如果使用
@TimSchmelter,则
中的所有条件必须为
true
才能返回该记录:实际上,这就是我写给用户1858332的内容。这不是我的样本数据,甚至不是我的问题。我完全同意你的看法,如果只使用样本数据,则不返回任何数据是可以的。
SELECT
    COUNT(ID) from [maintable]
WHERE
    NVL(status1, 'NO') <> 'YES'
    NVL COALESCE(status2, 'NO') <> 'YES'
    NVL COALESCE(status3, 'NO') <> 'YES'