0

我有这两个疑问。我不知道如何将它们组合在一起以制作派生表。我假设将第二个查询用作主查询,并在主查询的 FROM 子句中使用第一个查询。

SELECT EmailAddress, Orders.OrderID, SUM(ItemPrice * Quantity) AS OrderTotal
FROM Customers  
 JOIN Orders ON Customers.CustomerID = Orders.CustomerID
 JOIN OrderItems ON Orders.OrderID = OrderItems.OrderID
GROUP BY EmailAddress, Orders.OrderID;

SELECT EmailAddress, MAX(ItemPrice) as LargestOrder 
FROM Customers  
 JOIN Orders ON Customers.CustomerID = Orders.CustomerID
 JOIN OrderItems ON Orders.OrderID = OrderItems.OrderID
GROUP BY EmailAddress
4

2 回答 2

2

您只是希望结果在同一张表中吗?只需这样做:

SELECT FirstTable.*, SecondTable.LargestOrder
FROM (
  SELECT EmailAddress, Orders.OrderID, SUM(ItemPrice * Quantity) AS OrderTotal
  FROM Customers  
  JOIN Orders ON Customers.CustomerID = Orders.CustomerID
  JOIN OrderItems ON Orders.OrderID = OrderItems.OrderID
  GROUP BY EmailAddress, Orders.OrderID) as FirstTable
JOIN (
  SELECT EmailAddress, MAX(ItemPrice) as LargestOrder 
  FROM Customers  
  JOIN Orders ON Customers.CustomerID = Orders.CustomerID
  JOIN OrderItems ON Orders.OrderID = OrderItems.OrderID
  GROUP BY EmailAddress) as OtherTable ON FirstTable.EmailAddress = OtherTable.EmailAddress
于 2014-02-19T18:42:15.390 回答
1

你可以使用“窗口函数”来代替这样的东西

SELECT DISTINCT
    EmailAddress,
    Orders.OrderID,
    SUM(ItemPrice * Quantity) OVER (PARTITION BY EmailAddress, Orders.OrderID) AS OrderTotal,
    MAX(ItemPrice) OVER (PARTITION BY EmailAddress) AS LargestOrder
FROM Customers
JOIN Orders ON Customers.CustomerID = Orders.CustomerID
JOIN OrderItems ON Orders.OrderID = OrderItems.OrderID

否则,您可以将两个查询组合到各自的公共表表达式中,并在选择时将它们连接在一起。

WITH Total AS (
  SELECT EmailAddress, Orders.OrderID, SUM(ItemPrice * Quantity) AS OrderTotal
FROM Customers  
 JOIN Orders ON Customers.CustomerID = Orders.CustomerID
 JOIN OrderItems ON Orders.OrderID = OrderItems.OrderID
GROUP BY EmailAddress, Orders.OrderID
  ), Largest AS (

SELECT EmailAddress, MAX(ItemPrice) as LargestOrder 
FROM Customers  
 JOIN Orders ON Customers.CustomerID = Orders.CustomerID
 JOIN OrderItems ON Orders.OrderID = OrderItems.OrderID
GROUP BY EmailAddress
  )
SELECT Total.EmailAddress, Total.OrderId, OrderTotal, LargestOrder
FROM Total
INNER JOIN Largest ON Total.EmailAddress = Largest.EmailAddress
于 2014-02-19T18:46:44.537 回答