Tsql 如果存在,则允许通过
我有一个catch脚本,当一个求和结果为空值时,该脚本将拾取并插入一个0,如果我分解了我正在使用的代码,该脚本在一个查询上运行良好,但在我当前的查询上不起作用Tsql 如果存在,则允许通过,tsql,reporting-services,Tsql,Reporting Services,我有一个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
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, 0,DATEADD(YEAR, -1, GETDATE())), 120) and
DATEADD(YEAR, DATEDIFF(YEAR, 0,DATEADD(YEAR, 0, GETDATE())), 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,而May中没有任何内容,因此它推送空值的原因
If EXISTS(Select Fin from #PFIN)
GOTO TmpITD
Else insert into #PFIN (Fin) Values( 0)
TmpITD:
最后,这是一个catcher,它应该查找PFin有一个空值并插入一个0,但是我认为它所做的是直接进入TmpITD,就好像我只是运行insert语句,它添加了0
所以现在如果我运行整个语句,我会得到一个空值,这意味着最后的报告是空的
我是否在这里遗漏了一些东西,因为这个完全相同的代码在其他查询中工作,但在这个查询中不工作,它似乎确实存在,但有一个空值,这让我完全困惑
编辑:如果我在TmpITD的末尾添加了一些内容,它会将其推出,这样我现在就可以确定问题是If Exists认为它确实存在,而实际上它是Null如果您的最终表PFIN有行,那么即使其中的值为Null,它也存在。 解决方案可能是通过以下调整来删除空行并获得真正的空数据集:
If EXISTS(Select Fin from #PFIN WHERE Fin IS NOT NULL)
GOTO TmpITD
Else insert into #PFIN (Fin) Values( 0)
TmpITD:
或者,当您对一组空值进行分组时,由于聚合可以返回0,您可能也希望排除0值:
If EXISTS(Select Fin from #PFIN WHERE Fin <> 0)
GOTO TmpITD
Else insert into #PFIN (Fin) Values( 0)
TmpITD:
或者,对于那些避开后藤的人,如果不存在的话。。。插入