У меня чертовски много времени, чтобы мой запрос работал правильно. У меня есть 3 таблицы (ORDERS, ORDERSITEMS, ORDERPAYMENTS), в которых я пытаюсь создать отчет для ежемесячных налогов с продаж, который будет выглядеть следующим образом:
MONTH YEAR TOTAL RECEIPTS EXEMPT RECEIPTS NON-EXEMPT RECEIPTS SALES TAX
1 2020 $5,000 $4,500 $500 $31.25
ОБЩИЕ ПОЛУЧЕНИЯ: To чтобы получить это число, вам нужно сложить вместе все C .OrderPayments_Amount для данного периода времени, в данном случае МЕСЯЦ (C .OrderPayments_Date) = 1 И ГОД (C .OrderPayments_Date) = 2020
ОСВОБОЖДЕННЫЕ ЧЕНЫ: Вы должны определить, облагается ли товар налогом (например, цифровые файлы не облагаются налогом с продаж, а физические распечатки). Чтобы получить это, вы должны определить, облагается ли товар налогом, проверив B.OrdersItems_ItemChargeSalesTax. Если это поле равно 0, налог с продаж не взимается, а если он равен 1, то налог с продаж не взимается. Затем вам нужно отфильтровать, чтобы получить ORDERSITEMS только для временного интервала января 2020 года, используя группировку по столбцу C .OrderPayments_Date, который имеет B.OrdersItems_ItemChargeSalesTax = 0, и, наконец, сложите B.OrdersItems_Total вместе.
НЕЗАВИСИМЫЕ ПОЛУЧЕНИЯ: Чтобы получить этот номер, вы делаете то же самое для СЛЕДУЮЩИХ ПОЛУЧЕНИЙ выше, за исключением того, что вы ищите B.OrdersItems_ItemChargeSalesTax = 1 и складываете B.OrdersItems_Total вместе.
НАЛОГ НА ПРОДАЖУ: Чтобы получить это число, вы используете тот же фильтр даты, что и до МЕСЯЦА (C .OrderPayments_Date) = 1 И ГОД (C .OrderPayments_Date) = 2020, а затем добавьте столбец A.Order_SalesTax вместе.
Первый запрос, который я перечислил, работает нормально и дает мне общие уплаченные налоги и общий доход за месяц (прямо сейчас я жестко запрограммировал оператор WHERE, но он будет применяться через фильтры в моем списке страница). Что мне нужно получить из таблицы ORDERSITEMS, так это поле с именем ORDERSITEMS_ItemTotal и суммировать это поле, чтобы это была однострочная запись в запросе. Я видел, как другой человек выполнял вложенное соединение. Мы будем очень благодарны за любые предложения.
**ORDERS TABLE "A"**
Order_ID,
Order_SalesTax,
stateTaxAbbreviation
**ORDERSITEMS TABLE "B"**
Order_FK,
OrdersItems_ItemChargeSalesTax,
OrdersItems_Total
ПРИМЕЧАНИЕ. В таблице ORDERSITEMS один Order_FK может появляться несколько раз, так как в заказе может быть много элементов
**ORDERPAYMENTS TABLE "C"**
Order_FK,
OrderPayments_PaymentDate,
OrderPayments_Amount
ПРИМЕЧАНИЕ. В таблице ORDERPAYMENTS один Order_FK может появляться несколько раз, поскольку по заказу может быть несколько платежей.
Записывая это, это кажется простой задачей, но когда Я пытаюсь собрать все вместе, числа неправильные, потому что он добавляет записи несколько раз, потому что в заказе несколько элементов, и, таким образом, он каждый раз добавляет общую сумму платежа.
Вот код, который я ' я возился, и я был бы очень признателен за любое руководство. Заранее благодарю вас и, надеюсь, я достаточно ясно объяснил свою ситуацию.
Select
a.stateTaxAbbreviation AS StateAbbr,
MONTH(c.OrderPayments_Date) AS PaymentMonth,
YEAR(c.OrderPayments_Date) AS PaymentYear,
SUM(c.OrderPayments_Amount) AS TotalPayments,
SUM(a.Order_SalesTax) AS sales_tax
FROM dbo.ORDERS a
INNER JOIN ORDERPAYMENTS as c ON c.Order_FK = a.Order_ID
LEFT OUTER JOIN ORDERITEMS b on b.Order_FK = a.Order_ID
WHERE a.stateTaxAbbreviation = 'MA' AND Month(b.OrderPayments_Date) = 1 AND YEAR(b.OrderPayments_Date) = 2020
GROUP BY stateTaxAbbreviation , MONTH(c.OrderPayments_Date), Year(c.OrderPayments_Date)