Я хочу иметь возможность перечислить сумму изменения баланса, но для другого типа. На выполнение запроса уходит около 7 минут. Я уверен, что есть способ лучше его оптимизировать, но не знаю, как это сделать. Я не могу использовать его в качестве подзапроса, потому что мне нужно вернуть более одного результата.
SELECT DISTINCT a.ACCOUNTNUMBER AS [Account Number]
, s1.Deposit AS [Aggregate Share Balance]
, c.Deposit AS [Aggregate Checking Balance]
FROM dbo.ACCOUNT a
JOIN dbo.SAVINGS s
ON a.ACCOUNTNUMBER = s.PARENTACCOUNT
AND a.ProcessDate = s.ProcessDate
JOIN (SELECT a.ACCOUNTNUMBER
, SUM(st.BALANCECHANGE) AS [Deposit]
FROM dbo.ACCOUNT a
JOIN dbo.SAVINGS s
ON a.ACCOUNTNUMBER = s.PARENTACCOUNT
AND a.ProcessDate = s.ProcessDate
JOIN dbo.SAVINGSTRANSACTION st
ON st.PARENTACCOUNT = s.PARENTACCOUNT
WHERE a.ProcessDate = CONVERT(VARCHAR(8), DATEADD(DAY,-1, GETDATE()), 112)
AND a.CLOSEDATE IS NULL
AND s.CLOSEDATE IS NULL
AND st.ACTIONCODE = 'D'
AND s.TYPE IN (0, 1, 2, 3, 4, 6, 100)
GROUP BY a.ACCOUNTNUMBER) s1 ON s1.ACCOUNTNUMBER = a.ACCOUNTNUMBER
LEFT JOIN (SELECT a.ACCOUNTNUMBER
, SUM(st.BALANCECHANGE) AS [Deposit]
FROM dbo.ACCOUNT a
JOIN dbo.SAVINGS s
ON a.ACCOUNTNUMBER = s.PARENTACCOUNT
AND a.ProcessDate = s.ProcessDate
JOIN dbo.SAVINGSTRANSACTION st
ON st.PARENTACCOUNT = s.PARENTACCOUNT
WHERE a.ProcessDate = CONVERT(VARCHAR(8), DATEADD(DAY,-1, GETDATE()), 112)
AND a.CLOSEDATE IS NULL
AND s.CLOSEDATE IS NULL
AND st.ACTIONCODE = 'D'
AND s.TYPE IN (2, 100, 101, 102, 103, 104, 105, 106, 107, 108, 113, 150, 201)
GROUP BY a.ACCOUNTNUMBER) c ON c.ACCOUNTNUMBER = a.ACCOUNTNUMBER
WHERE a.ProcessDate = CONVERT(VARCHAR(8), dateadd(day,-1, getdate()), 112)
AND a.CLOSEDATE IS NULL
AND s.CLOSEDATE IS NULL
ORDER BY a.ACCOUNTNUMBER
Текущие результаты:
Account Number Aggregate Share Balance Aggregate Checking Balance
0000001234 7383.58 NULL
0000001235 95856.83 95856.83
0000001236 123.27 123.27
0000001237 1.88 NULL
0000001238 14812.26 NULL
0000001239 15.00 NULL
0000001240 4.06 NULL
0000001241 6.42 3.21
0000001242 3705.03 3705.03
0000001243 976841.06 1465261.59