Если существует, допускает нулевое значение через - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть скрипт 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, 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

Это затем суммирует все месяцы, которые относятся к требуемым установленным месяцам, поэтому в этом примере я просто хочу, чтобы он считал только май, в котором ничего нет, поэтому он выдвигает нулевое значение.

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

Наконец, это перехватчик, который должен найти #PFin, имеющий нулевое значение, и вставить 0, однако я думаю, что он идет прямо к TmpITD, как будто я просто запускаю вставкув операторе добавляется 0.

, поэтому в настоящее время, если я выполняю весь оператор, я получаю нулевое значение, что означает, что отчет в конце выходит пустым.

Я что-то здесь упускаюЕсли этот точно такой же код работает в других запросах, но не в этом, может показаться, что, возможно, он существует каким-то образом, но с нулевым значением, что меня полностью смутило.

РЕДАКТИРОВАТЬ: Если я добавлю что-то кконец TmpITD это выталкивает, так что теперь я точно знаю, что проблема в том, что если Exists думает, что он существует, когда на самом деле имеет значение Null

1 Ответ

1 голос
/ 08 ноября 2019

Если в вашей итоговой таблице #PFIN есть строки, она существует, даже если значения в ней равны NULL. Решением может быть следующая настройка для удаления NULL-строк и получения действительно пустого набора данных:

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

В качестве альтернативы, когда агрегаторы могут возвращать 0, когда вы группируете набор NULLS, вы можете также исключить 0 значений:

If EXISTS(Select Fin from #PFIN WHERE Fin <> 0) 
GOTO TmpITD
Else insert into #PFIN (Fin) Values( 0) 
TmpITD:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...