2016-06-29 2 views
-1

У меня есть следующие 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, где предложения, я получил много результатов, но это не полностью элементы заказа для каждого, только принимая первый набор результатов от каждого. Я пробовал много разных аранжировок, но, похоже, не могу взломать этот. Кани кто-нибудь поможет? Спасибо

ответ

0

Если sales_Release_Date это строка включает условие в кавычки ..

orderRelease.Sales_Release_Date >= '2016/06/22' 

Если даты типа, вам необходимо включить функции даты .. str_to_date

+0

hey..could ты мне знаете, если это сработало.? –

+0

Привет, Харика, извиняюсь, что это строка, а запрос с тиками вокруг нее работает, но он не суммирует все элементы заказа, я получаю только одну позицию заказов на каждую область продаж. Поэтому, если я разрешаю окно с 6-месячным дате, я ожидаю увидеть сотни тысяч значений в результатах, но я получаю только некоторые из них .... Действительно борюсь с этим – JamesB

+0

Поскольку запрос должен возвращать результаты в диапазоне дат, лучше иметь эти поля как поле даты, а не поле строки .. возможно ли преобразовать в 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 ') ' –

Смежные вопросы