В настоящее время я работаю с базой данных парадоксов, которая была внедрена до того, как я начал работать на своей нынешней работе в страховой фирме.
Короче говоря, когда я пытаюсь скомпилировать запрос дебетовых / кредитных балансов всех активных клиентов, для каждого клиента у меня разный баланс, если я делаю запрос для каждого отдельного клиента. С клиентской базой в 100 КБ и количеством транзакций более 2 миллионов это сделать невозможно. Вот что я делаю для индивидуального клиента:
Код:
SELECT COUNT(Debit) as NumberOfDebits
, COUNT(Credit) as NumberOfCredit
, SUM(Debit) as DebitTotal
, SUM(Credit) as CreditTotal
FROM MemberTransactions
WHERE MemberID = '####000094';
Как я упоминал выше, это дает правильные балансы для участника, но если я сделаю следующее:
SELECT MemberID
, COUNT(Debit) as NumberOfDebits
, COUNT(Credit) as NumberOfCredit
, SUM(Debit) as DebitTotal
, SUM(Credit) as CreditTotal
FROM MemberTransactions
GROUP BY MemberID;
Это дает мне как разные результаты подсчета, так и суммы для большинства членов таблицы.
Вот структура таблицы, чтобы вы могли понять, с чем мне приходится работать и чего я хочу достичь. Каждая строка представляет собой отдельную транзакцию с дебетовым или кредитовым счетом участника. Поэтому я хочу суммировать каждый дебет и кредит в одну ячейку для каждой, соответственно, для каждого участника. Вот почему я был в группе, думая, что это добавит каждый кредит и дебет для каждого участника, но он этого не сделает. Так как бы я пошел об этом. Я попытался выполнить внешнее объединение на membernr на основе сведений об участнике, но мне все еще нужно сгруппировать, чтобы в конце концов получить тот же результат
Структура таблицы:
PeriodNr I
EffectiveDate D
Entrynr +
MemberNr A
Date D
JournalNr A
ReferenceNr A
DtAmount N
CtAmount N
Narration A
ModifyUserId A
ModifStamp @
Одна вещь, которую я заметил, это то, что после выполнения следующего запроса:
SELECT COUNT(A.CtAmount) as CreditCount
, Sum(A.CtAmount) as Credit
, COUNT(A.DtAmount) as DebitCount
, SUM(DtAmount) as Debit
, M.MemberNr
, M.Premium
FROM MemAcc as A
LEFT OUTER JOIN Member as M on A.MemberNr = M.MemberNr
GROUP BY M.MemberNr, M.Premium;
В верхней части находится одна строка, в которой нет MemberNr и достаточно большое количество счетов, дебетов и кредитов. Гораздо выше, чем должна быть любая учетная запись, поэтому я предполагаю, что по какой-то причине пропущенные транзакции входят в этот ряд.
Например, если я однозначно запрашиваю, скажем, член X, я получу дебет и кредит 3094, счет дебета 55 и счет кредита 18, который соответствует количеству записей в таблице для этого члена но когда я запускаю вышеупомянутый запрос, я получаю счет кредита 2, счет дебета 19, кредит 1590 и дебет 2090.
Так что я в тупике. Я не знаю, является ли это проблемой Парадокса, или, скорее, моим неумелым пониманием SQL.
О да, у пустого участника счет кредита 273, счет дебета 341, кредит 19030 и дебет 17168.