У меня есть следующие 6 столов (упрощено для размещения):6 соединения таблиц SQL трудности запроса
Заказов:
+----------+--------------+-------------------+--------------+
| Order_ID | Sales_Area_ID| Project_Status_ID | Active |
+----------+--------------+-------------------+--------------+
| 1 | 3 | 2 | 1 |
| 2 | 2 | 2 | 1 |
| 3 | 3 | 3 | 1 |
| 4 | 2 | 1 | 1 |
+----------+--------------+-------------------+--------------+
Order_Release:
+------------------+---------+--------------------+--------------------+
| Order_Release_ID | Order_ID| Sales_Release_Date | Currency_Rate |
+------------------+---------+--------------------+--------------------+
| 1 | 1 | 2016/06/25 | 1 |
| 2 | 2 | 2016/02/19 | 1 |
| 3 | 1 | 2016/06/23 | 1.2 |
| 4 | 2 | 2016/06/22 | 1 |
+------------------+---------+--------------------+--------------------+
Rooflight_Request (тип продукта A):
+----------------------+---------+--------+---------+--------+----------------+
| Rooflight_Request_ID | Order_ID| Price | Discount| Qty | Record_Active |
+----------------------+---------+--------+---------+--------+----------------+
| 1 | 1 | 1200 | 50 | 2 | 1 |
| 2 | 2 | 1178 | 0 | 1 | 1 |
| 3 | 1 | 500 | 20 | 12 | 1 |
| 4 | 2 | 3521 | 0 | 1 | 0 |
+----------------------+---------+--------+---------+--------+----------------+
Rooflight_Request (тип продукта B):
+----------------------------+---------+--------+---------+--------+----------------+
| Rooflight_Extra_Request_ID | Order_ID| Price | Discount| Qty | Record_Active |
+----------------------------+---------+--------+---------+--------+----------------+
| 1 | 1 | 200 | 50 | 1 | 0 |
| 2 | 2 | 178 | 0 | 3 | 1 |
| 3 | 1 | 50 | 20 | 5 | 1 |
| 4 | 3 | 121 | 0 | 10 | 1 |
+----------------------------+---------+--------+---------+--------+----------------+
Sales_Area:
+---------------+----------------+--------------+
| Sales_Area_ID | Sales_Area_Name| Active |
+---------------+----------------+--------------+
| 1 | East | 0 |
| 2 | Lon 1 | 1 |
| 3 | Lon 2 | 1 |
| 4 | USA | 1 |
+---------------+----------------+--------------+
Project_Status:
+-------------------+----------------+
| Project_Status_ID | Project_Status |
+-------------------+----------------+
| 1 | Quote |
| 2 | Released |
| 3 | Invoiced |
| 4 | Released_PM |
| 5 | Credit_Note |
+-------------------+----------------+
Я пытаюсь написать запрос, который возвращает общее значение элементов порядка в столбцах сгруппированных по рядам торговых рядов. Поэтому я бы хотел, чтобы все торговые площади были возвращены, даже если сумма элементов равна нулю.
Я пытаюсь работать со следующими правилами: в окне даты выпуска заказа, добавляя только активные элементы в итоговые значения. До сих пор у меня есть этот запрос:
SELECT salesArea.Area_Name,
(SELECT SUM(((rr.Price - (rr.Price * (rr.Discount /100)))/orders.Currency_Rate) * rr.Quantity)
FROM Rooflight_Request AS rr
WHERE rr.Order_ID = orders.Order_ID
AND rr.Record_Active = 1
AND rr.Alternative_Option <> 1
) AS Rooflights_Total,
(SELECT SUM(((rx.Price - (rx.Price * (rx.Discount /100)))/orders.Currency_Rate) * rx.Quantity)
FROM Rooflight_Extra_Request AS rx
WHERE rx.Order_ID = orders.Order_ID
AND rx.Record_Active = 1
AND rx.Alternative_Option <> 1
) AS Extras_Total
FROM Orders AS orders
LEFT JOIN Order_Release AS orderRelease ON
orders.Order_ID = orderRelease.Order_ID
LEFT JOIN Project_Status AS projectStatus ON
orders.Project_Status_ID = projectStatus.Project_Status_ID
AND projectStatus.Record_Active = 1
LEFT JOIN Sales_Area AS salesArea ON
orders.Sales_Area_ID = salesArea.Sales_Area_ID
AND salesArea.Record_Active = 1
WHERE orderRelease.Sales_Release_Date >= 2016/06/22
AND orderRelease.Sales_Release_Date <= 2016/06/29
AND (projectStatus.Project_Status = 'Invoiced'
OR projectStatus.Project_Status = 'Released'
OR projectStatus.Project_Status = 'Released PM')
GROUP BY orders.Order_ID
Запрос возвращает нулевые результаты. Если я удалю sales_Release_Date, где предложения, я получил много результатов, но это не полностью элементы заказа для каждого, только принимая первый набор результатов от каждого. Я пробовал много разных аранжировок, но, похоже, не могу взломать этот. Кани кто-нибудь поможет? Спасибо
hey..could ты мне знаете, если это сработало.? –
Привет, Харика, извиняюсь, что это строка, а запрос с тиками вокруг нее работает, но он не суммирует все элементы заказа, я получаю только одну позицию заказов на каждую область продаж. Поэтому, если я разрешаю окно с 6-месячным дате, я ожидаю увидеть сотни тысяч значений в результатах, но я получаю только некоторые из них .... Действительно борюсь с этим – JamesB
Поскольку запрос должен возвращать результаты в диапазоне дат, лучше иметь эти поля как поле даты, а не поле строки .. возможно ли преобразовать в datetime? то вы можете сделать что-то вроде этого ... 'WHERE orderRelease.Sales_Release_Date между str_to_date ('06/22/2016 00:00:00 ','% m /% d /% Y% H:% i:% s ') и str_to_date ('06/29/2016 23:59:59 ','% m /% d /% Y% H:% i:% s ') ' –