如果存在允许通过以下方式返回空值

我有一个catch脚本,用于在总和为空值时插入并插入0,如果我分解了我正在使用的代码,则该脚本在一个查询上工作正常,但对当前查询却无效

Declare @Period int = 5
SELECT A.MATTER_CODE,DATEPART(month,A.DATE_OPENED) As DateOpened,B.DEPTNAME,B.DEPTCODE 
INTO #TmpPREVYTD
FROM MATTER A
LEFT JOIN DEPT_MASTER B on A.DEPT_CODE = B.DEPTCODE
WHERE A.date_opened between DATEADD(YEAR,DATEDIFF(YEAR,DATEADD(YEAR,-1,GETDATE())),120) and 
DATEADD(YEAR,120)
ORDER BY DATE_OPENED

这会在正确的年份和月份推出我查询所需的数据

SELECT COUNT(*) As 'Fin',Dateopened Into #TmpPFin FROM #TmpPREVYTD where DEPTCODE = 'FIN' GROUP BY 
DATEOPENED

这在原始数据中每有一次与财务相关的工作都进行计数。

SELECT SUM(FIN)As Fin INTO #PFIN FROM #TmpPFIN WHERE Dateopened Between 5 and @Period

然后它汇总了与所需的设置月份有关的所有月份,因此在此示例中,我只希望它只计算May,其中没有任何内容,因此为什么要推入空值。

If EXISTS(Select Fin from #PFIN) 
GOTO TmpITD
Else insert into #PFIN (Fin) Values( 0) 
TmpITD:

最后,这是捕获程序,应该发现#PFin具有空值并插入0,但是我认为它正在直接进入TmpITD,就像我只是运行insert语句将其添加0。

因此,当前,如果我运行整个语句,我将不断获得空值,这意味着最后的报告将为空白。

我是否在这里遗漏了一些东西,因为这完全相同的代码可在其他查询中使用,但不适用于此查询,似乎它确实以某种方式存在但具有空值,这使我完全困惑。

编辑:如果我在TmpITD的末尾添加一些内容,它会将其推出,所以我现在可以确定的问题是,如果Exists认为它实际上为Null时确实存在,那么

iloveuvm 回答:如果存在允许通过以下方式返回空值

如果最终表#PFIN中有行,那么即使其中的值为NULL,它也存在。 解决方案可能是以下调整,以删除NULL行并获取真正为空的数据集:

If EXISTS(Select Fin from #PFIN WHERE Fin IS NOT NULL) 
GOTO TmpITD
Else insert into #PFIN (Fin) Values( 0) 
TmpITD:

或者,当您将一组NULL分组时,由于聚集物可能返回0,因此您可能也想排除0值:

If EXISTS(Select Fin from #PFIN WHERE Fin <> 0) 
GOTO TmpITD
Else insert into #PFIN (Fin) Values( 0) 
TmpITD:
本文链接:https://www.f2er.com/3138104.html

大家都在问