您如何向其中添加OrderID?我无法在所有OrderID部分上都没有出现错误的情况下显示它

时间:2019-03-02 01:33:54

标签: sql sql-server

我无法在没有所有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

1 个答案:

答案 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; 

rextester here

每个人都希望您实际上并没有保存信用卡信息-因为这在很多方面都是不好的。