Как заменить объединение подзапросом и cte? - PullRequest
0 голосов
/ 07 октября 2019

Здравствуйте, я практикую несколько вариантов для каждого вопроса, который я решаю. Я хочу преобразовать этот запрос с помощью join в запрос с подзапросами, а другой запрос с cte.

, однако мне трудно это сделать:

SELECT 
    C.CompanyName, MAX(OD.UnitPrice*OD.Quantity)MaxOdPrice, 
    MIN(OD.UNITPRICE*OD.Quantity) MinOdPrice
FROM [Order Details] OD 
JOIN Orders O       ON OD.OrderID=O.OrderID
JOIN Customers C    ON O.CustomerID=C.CustomerID
GROUP BY C.CompanyName

спасибо

Ответы [ 2 ]

0 голосов
/ 07 октября 2019

полностью не проверено но я думаю, что-то подобное может сделать это без объединений.

select C.CompanyName,
   max(select MAX(UnitPrice * Quantity)
       from [Order Details]
       where OrderID in (select distinct OrderID
                         from Orders
                         where CustomerID in (select CustomerID
                                              from Customers innerC
                                              where innerC.CompanyName = C.CompanyName
                                             )
                       )
       group by OrderID
      ) AS MaxOdPrice
FROM Customers C
GROUP BY C.CompanyName

Я только показываю MaxOdPrice.

0 голосов
/ 07 октября 2019

Вам все еще понадобятся СОЕДИНЕНИЯ, но вот упрощенный CTE, который, я надеюсь, может дать некоторые идеи о том, как действовать дальше

;With cteCustomers
AS(
    SELECT  X.CustomerID, X.CompanyName
    FROM    Customers X
)
SELECT 
    C.CompanyName, MAX(OD.UnitPrice*OD.Quantity)MaxOdPrice, 
    MIN(OD.UNITPRICE*OD.Quantity) MinOdPrice
FROM [Order Details]    OD 
JOIN Orders             O   ON  OD.OrderID=O.OrderID
JOIN cteCustomers       C   ON  O.CustomerID=C.CustomerID
GROUP BY C.CompanyName
...