如果COUNT结果小于1,我希望我的存储过程在列中返回NULL,否则返回COUNT值。这是一种反向的ISNULL ???
SELECT *,
(SELECT COUNT(*) FROM Requests WHERE RequestDB = RequestDatabase.RequestDB
AND RequestStatus < 3) AS OpenRequests
FROM RequestDatabase
我在考虑使用CASE WHEN,但是我收到错误,说明我的CASE不能为空。
答案 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中执行此操作。