2017-02-20 1 views
0

у меня есть что-то вроде этогоКак рассчитать разницу в случае

CASE WHEN j.DocTypeID=0 AND CreditOrDebit = 'd' THEN SecDebit END AS 'debit', 
CASE WHEN j.DocTypeID=0 AND CreditOrDebit = 'c' THEN SecCredit END AS 'credit', 

Я хочу, чтобы вычислить разницу между дебетом и кредитом

Если я использую

Bal=CASE WHEN j.DocTypeID=0 AND CreditOrDebit = 'd' THEN SecDebit END - CASE WHEN j.DocTypeID=0 AND CreditOrDebit = 'c' THEN SecCredit END, 

Это дает мне пустой значение, что не так в этом заявлении, может кто-нибудь советовать, что делать здесь.

+0

Использовать двойные кавычки для псевдонимов столбцов, например. ' "Дебет"'. – jarlh

ответ

1

Выполнение любой арифметики по NULL возвращает NULL. Сделайте каждый случай возврата 0, а не NULL, если не условие матча:

Bal=CASE WHEN j.DocTypeID=0 AND CreditOrDebit = 'd' THEN SecDebit ELSE 0 END - 
    CASE WHEN j.DocTypeID=0 AND CreditOrDebit = 'c' THEN SecCredit ELSE 0 END, 
+0

Хороший улов, но я бы добавил «COALESCE (SecDebit, 0)», а также, чтобы предотвратить любой NULL вообще –

+0

Я пишу его в ясной форме, чтобы помочь понять .... –

-1
Bal=(CASE WHEN j.DocTypeID=0 AND CreditOrDebit = 'd' THEN SecDebit ELSE 0 END - 
CASE WHEN j.DocTypeID=0 AND CreditOrDebit = 'c' THEN SecCredit ELSE 0 END) 
+0

Мне нравится downvote с описанием. –

+0

Что случилось в моем ответе? Пожалуйста, объясните причину понижения? –

0

Если у вас есть только один столбец (CreditOrDebit), чтобы отличить кредитной или дебетовой карты, то нет никакой необходимости иметь две колонки secDebit и secCredit. Поэтому я предполагаю, что существует только один столбец secDebitorCredit. Учитывая этот ниже запрос, вы получите окончательную разницу между дебетовым кредитом.

SELECT SUM(ISNULL(CASE WHEN j.DocTypeID=0 AND CreditOrDebit = 'd' THEN secDebitorCredit END , 0) - 
ISNULL(CASE WHEN j.DocTypeID=0 AND CreditOrDebit = 'c' THEN secDebitorCredit END, 0))AS 'Diff' 
Смежные вопросы