具有多个返回选项的Sql查询



我试图构建返回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表达式:

  1. 如果其他列中有值,则返回计数
  2. 如果另一列中没有值,如果id仍然存在,则返回0。
  3. 以上都不存在,返回-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

最新更新