2017-02-09 23 views
0

我有2代表這是選擇Aggregate ((數量*單價)/ 100)*折扣* 100)和AverageFreight =(運費/總項目按順序)*總計行項目爲了從多個表

我寫的select語句是這樣的:

select Orders.OrderID,CustomerID, EmployeeID, ProductID,ShippedDate, RequiredDate, ShipVia,(Freight/sum(Quantity))*Quantity 'TotalFreight', 
Quantity * UnitPrice 'LineItemTotal',sum(Quantity) 'Line Item Quantity',sum(((Quantity * UnitPrice)/100) * Discount*100) 'Total Line Discount',Discount from Orders 
inner join [Order Details] on Orders.OrderID = [Order Details].OrderID 
group by Orders.OrderID,Orders.CustomerID, Orders.EmployeeID, [Order Details].ProductID, Orders.RequiredDate, Orders.ShipVia, Orders.Freight, [Order Details].Quantity,[Order Details].UnitPrice, [Order Details].Discount, Orders.ShippedDate 

但是,它不計算AverageFreight權利。我究竟做錯了什麼? enter image description here

回答

2

您不需要爲此進行聚合。窗口函數應該足夠了:

select o.*, od.*, 
     (Freight/order_quantity)*Quantity as AllocatedFreight, 
     Quantity * UnitPrice as LineItemTotal, 
     Quantity as [Line Item Quantity], 
     (((Quantity * UnitPrice)/100) * Discount*100) as [Total Line Discount, 
     Discount 
from Orders o inner join 
    (select od.*, sum(quantity) over (partition by od.orderId) as order_quantity 
     from [Order Details] od 
    ) od 
    on o.OrderID = od.OrderID; 
+0

感謝您的快速回答。它工作得很好。但有沒有辦法做到這一點,而不使用'分區'? – Kranatos

+0

@Kranatos。 。 。我認爲這是最簡單的方法。 –

+0

是的。我只想練習更多關於聚合:) – Kranatos