查询在 iif ms-access sql 中不返回真值

Posted

技术标签:

【中文标题】查询在 iif ms-access sql 中不返回真值【英文标题】:Query doesn't retrun true value in iif ms-access sql 【发布时间】:2020-12-05 17:55:45 【问题描述】:

我想得到RollNo,如果它在满足某些条件时存在,否则它应该返回-1。但在我的情况下,当它存在时它会返回 RollNo,否则它会返回 nothing

SQL 在:-

SELECT iif(isnull(RollNo),-1,RollNo) from students where SName = "sf" and FName= "da" and 
DOB=#7/16/2020# and ClassID = 0

【问题讨论】:

【参考方案1】:

嗯。 . .如果你总是想只返回一行,那么我建议聚合:

SELECT NZ(MAX(RollNo), -1)
FROM students 
WHERE SName = "sf" and FName= "da" and DOB=#7/16/2020# and ClassID = 0;

如果没有任何内容与WHERE 子句匹配,则MAX(RollNo) 返回NULL -- 由NZ() 转换为-1

【讨论】:

这适用于访问。但我必须在 C# 代码中得到这个。 nz 不适用于 c# @MuhammadRizwan 这行得通吗:SELECT IIF(ISNULL(MAX(RollNo)), -1, MAX(RollNo) ? @TimBiegeleisen 这行得通。我已经检查了这个查询。 @MuhammadRizwan 。 . .你能确定查询的哪一部分不工作吗?也许COALESCE() 有效。 NZ() 绝对是 MS Access 的一部分:techonthenet.com/access/functions/advanced/nz.php @MuhammadRizwan 。 . .您可以将其替换为IIF(MAX(RollNo) IS NULL, MAX(RollNo), -1)【参考方案2】:

这将返回一行,字段为 RollNo

SELECT iif(isnull(max(RollNo)),-1,max(RollNo)) from students where SName = "sf" and
 FName= "da" and DOB=#7/16/2020# and ClassID = 0

如果where子句中的条件满足则返回RollNo否则返回-1

【讨论】:

有趣的ISNULL(一种 VBA 方法)与 ODCB/OLEDB 访问连接一起工作。最好使用 SQL 的IS NULL 表达式。 我不知道,但这有效。 IS NULL 表达式也有效。

以上是关于查询在 iif ms-access sql 中不返回真值的主要内容,如果未能解决你的问题,请参考以下文章

访问sql中的IIF和Nz运算符[关闭]

在 sql (MS-Access) 中编写分组查询

使用 SQL 在 Ms-access 查询中运行 Total

SQL 查询语句 IIF()处理条件判断

SQL 查询语句 IIF()处理条件判断

SQL Server IIF 与 CASE