Я думаю, что вы слишком усложняете вещи
SELECT
LEFT(Account,4) as Entity,
RIGHT(Account,9) as Account,
SUM(CASE WHEN accounting_date <= EOMONTH(@date, -1) THEN debit+credit END) as BBal,
SUM(CASE WHEN accounting_date > EOMONTH(@date, -1) THEN debit+credit END) as Activity
FROM
GLT_CURRENT__TRANSACTION
WHERE
Left(Account,4) = '9452' and
Right(Account,9) IN ('1110.0130','1110.0131','2110.0061','2110.0062') and
Accounting_Date <= EOMONTH(@Date)
GROUP BY
Left(Account,4),
right(Account,9)
Этот запрос, когда ему присваивается @date, например 14 марта 2018 года, выбирает все транзакции до 31 марта 2018 года.Для каждой строки CASE WHEN внутри SUM проверяет, является ли отчетная дата прошлым (для ббал) или текущим месяцем (для активности).Если учетная дата для конкретной транзакции не соответствует правилу CASE WHEN, тест возвращает false), тогда возвращаемое значение из CASE WHEN равно нулю, поэтому оно не суммируется
Чтобы понять, как работает этот запрос, запустите его без группировки / суммирования:
SELECT
LEFT(Account,4) as Entity,
RIGHT(Account,9) as Account,
Accounting_date,
(CASE WHEN accounting_date <= EOMONTH(@date, -1) THEN debit+credit END) as BBal,
(CASE WHEN accounting_date > EOMONTH(@date, -1) THEN debit+credit END) as Activity
FROM
GLT_CURRENT__TRANSACTION
WHERE
Left(Account,4) = '9452' and
Right(Account,9) IN ('1110.0130','1110.0131','2110.0061','2110.0062') and
Accounting_Date <= EOMONTH(@Date)
Транзакции будут такими же для @date в марте:
1, 1, 02-Feb-18, $100, null --previous month
1, 1, 28-Feb-18, $300, null --previous month
1, 1, 02-Mar-18, null, $400 --current month
1, 1, 28-Mar-18, null, $500 --current month
Посмотрите, как происходит случай, когда сумма транзакции разбивается настолбец bbal или деятельности в зависимости от отчетной даты?Теперь, когда мы суммируем их и группируем (удаляем столбец даты из результатов запроса):
1, 1, $400, $900 --the $400 is £100+$300, the $900 is $400+$500