Sql server 在FROM子句中使用子查询连接两个表

Sql server 在FROM子句中使用子查询连接两个表,sql-server,Sql Server,我对我作业中的这个问题发疯了。 不,我不想让你给我答案!我只想被推到正确的方向,因为我一直在为此奋斗 问题是 编写一个SELECT语句,返回三列:EmailAddress、OrderID和每个客户的订单总数。为此,您可以按EmailAddress和OrderID列对结果集进行分组。此外,必须根据OrderItems表中的列计算订单总额 编写第二条SELECT语句,该语句在其FROM子句中使用第一条SELECT语句。主查询应返回两列:客户的电子邮件地址和该客户的最大订单。为此,您可以按EmailA

我对我作业中的这个问题发疯了。 不,我不想让你给我答案!我只想被推到正确的方向,因为我一直在为此奋斗

问题是

编写一个SELECT语句,返回三列:EmailAddress、OrderID和每个客户的订单总数。为此,您可以按EmailAddress和OrderID列对结果集进行分组。此外,必须根据OrderItems表中的列计算订单总额

编写第二条SELECT语句,该语句在其FROM子句中使用第一条SELECT语句。主查询应返回两列:客户的电子邮件地址和该客户的最大订单。为此,您可以按EmailAddress列对结果集进行分组

这就是我到目前为止所做的:

SELECT EmailAddress, OrderID, SUM(ItemTotal * Quantity) AS OrderTotal
FROM Customers JOIN
    (SELECT OrderID, MAX(ItemTotal * Quantity) AS LargestOrder
     FROM Orders, OrderItems
     WHERE OrderItems.OrderID = Orders.OrderID)
GROUP BY EmailAddress;
表格的设置方式如下:

Customers Table:
CustomerID, EmailAddress, Password, FirstName, LastName, ShippingAddressID, BillingAddressID

OrderItems Table:
ItemID, OrderID, ProductID, ItemPrice, DiscountAmount, DiscountTotal, PriceTotal, ItemTotal, Quantity

Order Table:
OrderID, CustomerID, OrderDate, ShipAmount, TaxAmount, ShipDate, ShipAddressID, CardType, CardNumber,CardExpires, BillingAddressID.

任何帮助都将不胜感激

您的加入中缺少ON以及加入中选择的别名。您还需要订单的来源,因此我将其添加到您的查询中

 SELECT c.emailaddress,
       Max(OrderCost) AS LargestOrder
FROM   customers c
       INNER JOIN orders o
               ON c.customerid = o.customerid
       JOIN (SELECT orders.orderid,
                    itemtotal * quantity AS OrderCost
             FROM   orders,
                    orderitems
             WHERE  orderitems.orderid = orders.orderid)largest
         ON largest.orderid = o.orderid
GROUP  BY c.emailaddress  

当任务需要使用选择表单时,选择一个解决方案可能就是所谓的CTE,它允许您定义一个结果,您可以在以后的需求中进一步使用该结果

例如:

WITH Sales_CTE (SalesPersonID, NumberOfOrders)
AS
(
    SELECT SalesPersonID, COUNT(*)
    FROM Sales.SalesOrderHeader
    WHERE SalesPersonID IS NOT NULL
    GROUP BY SalesPersonID
)
SELECT AVG(NumberOfOrders) AS "Average Sales Per Person"
FROM Sales_CTE;
GO
因此,要解决您的问题:

WITH ORDER_TOTAL (EmailAddress, OrderID, OrderTotal)
AS
(
   SELECT EmailAddress, OrderID, SUM(i.ItemTotal) as OrderTotal
   FROM Orders o INNER JOIN OrderItems i on o.OrderID = i.OrderID
   GROUP BY EmailAddress, OrderID
) SELECT EmailAddress, MAX(OrderTotal) as MaxOrder 
  FROM ORDER_TOTAL 
  GROUP BY EmailAddress;

我添加了更改并运行了代码,得到了一个模棱两可的列名'orderid'errorI qualified orders。确保您的成本使用正确的列。
SELECT k.email_address, MAX(k.order_total) AS largest_order
FROM (SELECT c.email_address, o.order_id, ((oi.item_price-oi.discount_amount)*oi.quantity) AS order_total
FROM customers c JOIN orders o
ON c.customer_id =o.customer_id
JOIN order_items oi
ON o.order_id = oi.order_id
GROUP BY c.email_address, o.order_id) as k
GROUP BY k.email_address;
SELECT email_address, MAX(order_total) as max_order_total,MIN(order_id) as min_order_id  
FROM(
  SELECT email_address, order_items.order_id, SUM((item_price-discount_amount)*quantity) as order_total 
  FROM customers INNER JOIN orders
    ON customers.customer_id=orders.customer_id
    INNER JOIN order_items
    ON orders.order_id=order_items.order_id
  GROUP BY email_address,order_items.order_id
)v
GROUP BY email_address
ORDER BY max_order_total DESC