我无法在没有所有OrderID部分错误的情况下显示它。我尝试将其添加到顶部,然后添加到子查询,并显示错误的列错误。正确的方法是什么?
TABLE SETUP:
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
CODE:
SELECT c.EmailAddress, MAX(OrderCost) AS
LargestOrder
FROM Customers c
JOIN ORDERS o ON c.CustomerID = o.CustomerID
JOIN (Select Orders.OrderID, ItemPrice * Quanity AS OrderCost FROM Orders, OrderItems
WHERE OrderItems.OrderID = Orders.OrderID)Largest
ON Largest.OrderID = o.OrderID
GROUP BY c.EmailAddresses
答案 0 :(得分:2)
这确实可以帮助您将一些精力放在演示您的问题的脚本中。这样一来,您就无需猜测您如何定义事物以及使用的实际值。
根据我的猜测,这是一种方法。注意“一个”-有一些技术可以达到相同的结果。 CTE会像尝试代码一样计算每个订单的总费用。自从您建议了top以来,我也使用了它来演示其用法。根据降序的OrderCost抢占第一行,将使您获得总成本最高的订单。只需将cte加入“订单和客户”即可包含所需的列。
with cte as (select OrderID, sum(ItemPrice * Quantity) as OrderCost
from @OrderItems
group by OrderID)
select top 1 Ord.OrderID, Ord.OrderDate, cust.EmailAddress, cte.OrderCost
from cte inner join @Orders as Ord
on cte.OrderID = Ord.OrderID
inner join @Customers as Cust
on Ord.CustomerID = Cust.CustomerID
order by cte.OrderCost desc;
每个人都希望您实际上并没有保存信用卡信息-因为这在很多方面都是不好的。