我试图构建返回0或更多的查询,如果Id不存在则返回-1例如:
Select Count(*)
From my table
Where id = inputId
我试着这样用例:
Select
CASE WHEN Count(*) >= 0 THEN Count(*)
ELSE -1 END
From .....
Where....
我的问题是0是有效的结果,意味着Id存在0列,如果id不存在,我需要返回-1
使用case
表达式:
- 如果其他列中有值,则返回计数
- 如果另一列中没有值,如果id仍然存在,则返回0。
- 以上都不存在,返回-1。
select case when count(othercolumn) > 0 then count(id) -- or perhaps "then count(othercolumn)"
when count(id) > 0 then 0
else -1
end
From my table
Where id = inputId
我正在阅读几行在这里,但在一个纯粹的猜测,你是实际上想要的东西是这样的:
"我想要一个COUNT
的行数为一个特定的ID,其中另一列有一个特定的值。如果没有ID的行,我想返回-1
,但是,如果没有其他列具有特定值的行,那么应该返回0
。">
如果这是正确的解释,那么你可以使用子查询,然后在子查询GROUP BY
的ID,即使它仍然是一个不同的组;这意味着如果ID不存在,则不返回任何行。为了确保无论其他列的值如何,都返回行,您需要使用条件聚合。结果如下所示:
SELECT ISNULL((SELECT COUNT(CASE OtherColumn WHEN @YourValue THEN 1 END)
FROM dbo.YourTable
WHERE ID = @ID
GROUP BY ID),-1);
ISNULL
则意味着当没有返回任何行时,将导致NULL
,然后返回-1
。