当COUNT小于1时返回NULL

时间:2014-09-22 21:13:29

标签: sql-server tsql

如果COUNT结果小于1,我希望我的存储过程在列中返回NULL,否则返回COUNT值。这是一种反向的ISNULL ???

SELECT *, 
(SELECT COUNT(*) FROM Requests WHERE RequestDB = RequestDatabase.RequestDB 
    AND RequestStatus < 3) AS OpenRequests
FROM RequestDatabase

我在考虑使用CASE WHEN,但是我收到错误,说明我的CASE不能为空。

4 个答案:

答案 0 :(得分:3)

您可以使用NULLIF()函数。

SELECT NULLIF(COUNT(*), 0)
FROM TableName

您的计数将为0或大于零,因为您希望任何小于1的数据为空,这使您只剩下零值,并且您可以像这样写出查询......

SELECT *, 
(SELECT NULLIF(COUNT(*),0) FROM Requests WHERE RequestDB = RequestDatabase.RequestDB 
    AND RequestStatus < 3) AS OpenRequests
FROM RequestDatabase

答案 1 :(得分:3)

实现此目标的另一种方法是使用SUM(1)代替COUNT(*)

如果在空结果集上运行,SUM(1)将返回NULL。或者否则是行数。

答案 2 :(得分:0)

这对我有用,并根据需要返回NULL

DECLARE @test INT
SET @test = 0

SELECT (CASE WHEN @test < 1 THEN NULL ELSE @test END) --NULL

答案 3 :(得分:0)

如果您正在使用支持它的SQL Server版本,IIF(立即if)函数将执行此操作。否则,您必须对CASE执行某些操作,这也是可行的。

SELECT *, 
       (SELECT IIF(COUNT(*) == 0, NULL, COUNT(*)) FROM Requests WHERE RequestDB = RequestDatabase.RequestDB AND RequestStatus < 3) AS OpenRequests
FROM RequestDatabase

但正如评论者所说,这听起来并非最佳做法。如果需要,可以在客户端上转换为null,但不要在T-SQL中执行此操作。