Я пытаюсь создать отчет о расходах и кредитах на основе таблицы сборов и кредитов, которые анализируются из файла CSV. Таблица начислений и таблица начисления кредитов выглядят в основном одинаково, отличается только одно поле, как показано ниже
BillingPeriod | ItemCode | ItemName | Charge(Credit) | IsAdjustment | AdjustmentDate | ReportTimestamp
Для создания этого отчета я группирую расходы и кредиты и суммирую их на основе имеющихся у меня кодов товаров. Например, один мой запрос, который суммирует вспомогательные расходы за все расчетные месяцы, будет
SELECT Charges.BillingPeriod, Sum(Charges.Charge) as SumOfCharge
FROM Charges
WHERE (Charges.ItemCode Between 1301 and 1380)
GROUP BY Charges.BillingPeriod;
Это все прекрасно, но проблема возникает, когда код товара не найден. Я хочу, чтобы эти запросы были достаточно гибкими, чтобы в них отображалась сводка с определенным зарядом / кредитом или без него, поскольку с вас может не взиматься плата за один месяц, а с вас может взиматься плата за другой месяц.
Запрос, который не работает, является следующим:
SELECT Credits.BillingPeriod, Sum(Credits.Credit) AS SumOfCredit
FROM Credits
WHERE (((Credits.ItemCode)=2217 Or (Credits.ItemCode)=2218 Or (Credits.ItemCode)=2241 Or (Credits.ItemCode)=2245 Or (Credits.ItemCode)=2260))
GROUP BY Credits.BillingPeriod;
Так как мы не были зачислены на эти конкретные коды предметов, они не могут быть суммированы, и набор результатов представляет собой пустую таблицу. Могу ли я просто вернуть нулевой платежный период и 0 для SumOfCredit, если возникнет такая ситуация? Я попробовал функцию Nz (), а также IIf (IsNull ()), но это мне не помогло.
Любая помощь будет оценена.
РЕДАКТИРОВАТЬ: я изменил запрос так, чтобы он выглядел так:
SELECT Charges.BillingPeriod, SUM(Charges.Charge) AS SumOfCharge
FROM Charges
WHERE (((Charges.ItemCode) Between 1900 And 1995))
GROUP BY Charges.BillingPeriod
UNION
SELECT BillingPeriod, 0
FROM Charges
WHERE NOT EXISTS ( SELECT * FROM Charges WHERE (Charges.ItemCode Between 1900 And 1995));
Это работает, но не отображает ВСЕ биллинговые периоды. Например, если за один конкретный код товара взимается плата за 01.01.2011 и 1.02.2011, он отобразит ТОЛЬКО эти две записи. Я хочу, чтобы в таблице указывался каждый применимый расчетный период. Сборы, где есть плата за месяц, и нули, где нет. Я попытался добавить третий UNION в конец запроса, снова выбрав BillingPeriod, 0, но он добавляет дубликат записи на месяц, что мне не нужно. Опять же, любая помощь будет потрясающей.