Более эффективный способ структурировать это SQL заявление? - PullRequest
1 голос
/ 21 апреля 2020

Этот запрос вычисляет поток на основе самого последнего заказа. Кто-нибудь может предложить более эффективный способ структурировать это? Я рассматривал CTE, но хочу, чтобы его было легко читать и запускать как можно быстрее.

       SELECT
       @nTotalFlowRate = SUM(o.[OrderCFS])
       FROM DeliveryPoints
       JOIN DeliveryPointsList ON DeliveryPointsList.DeliveryPointID = DeliveryPoints.DeliveryPointID
              AND DeliveryPointsList.DeliveryPointsListStatus = 'A'
       JOIN [dbo].[Orders] AS o ON o.DeliveryPointID = DeliveryPointsList.DeliveryPointID
              AND o.OrderId =
             ( SELECT TOP 1 o1.OrderID
                 FROM [dbo].[Orders] AS o1
                WHERE ( o1.[AcctEntityID] = @aiAcctEntityID )
                  AND ( o1.[WaterSourceID] = @aiWaterSourceID )
                  AND ( o1.[DeliveryPointID] = DeliveryPointsList.[DeliveryPointID] )
                             AND ( (o1.OrderTypeCode = 'W' and o1.WebOrderApproved = 1)
                                         OR (o1.OrderTypeCode !='W'))
                  AND ( o1.[OrderStatus] = 'A' ) --Added 5/17/2019 BTO Exclude Inactive Orders
                  AND ( o1.[ChangeTime] <= GETDATE() ) 
                           ORDER BY o1.ChangeTime desc) 
       WHERE DeliveryPointsList.AllotAcctEntityID = @aiAcctEntityID 

1 Ответ

0 голосов
/ 21 апреля 2020

попробуйте это:

SELECT @nTotalFlowRate = SUM(O.[OrderCFS])
FROM DeliveryPoints AS DP
    JOIN DeliveryPointsList AS DL ON 
        DL.DeliveryPointID = DP.DeliveryPointID
        AND DP.DeliveryPointsListStatus = 'A'
        AND DP.AllotAcctEntityID = @aiAcctEntityID
    JOIN [dbo].[Orders] AS O ON 
        O.DeliveryPointID = DP.DeliveryPointID
        AND EXISTS (
                    SELECT NULL
                    FROM [dbo].[Orders] AS O1
                    WHERE O.OrderId =O1.OrderId
                        AND O1.[AcctEntityID] = @aiAcctEntityID
                        AND O1.[WaterSourceID] = @aiWaterSourceID
                        AND O1.[DeliveryPointID] = DP.[DeliveryPointID]
                        AND O1.[OrderStatus] = 'A'
                        AND O1.[ChangeTime] <= GETDATE()
                        AND ( (O1.OrderTypeCode = 'W' AND O1.WebOrderApproved = 1)
                             OR O1.OrderTypeCode !='W')
                    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...