2017-03-08 54 views
1

以下查询返回以下输出。使用子查询获取总和

输出

BrandName Amount 
brand1  314.00 
brand1  24.00 
brand2  75.00 
brand2  48.00 

期望的输出是越来越总量为每个品牌像下面

BrandName Amount 
brand1  338.00 
brand2  123.00 

查询

SELECT Brands.BrandName, 
    SUM((OrderDetails.Quantity * OrderDetails.UnitPrice)) + Orders.DeliveryCharge - ((SUM((OrderDetails.Quantity * OrderDetails.UnitPrice)) + Orders.DeliveryCharge) * Orders.Discount/100) AS Amount 

FROM dbo.Orders 

INNER JOIN dbo.Outlets 
    ON dbo.Orders.OutletID = dbo.Outlets.OutletID 


INNER JOIN dbo.OrderDetails 
    ON dbo.OrderDetails.OrderID = dbo.Orders.OrderID 
INNER JOIN dbo.Brands 
    ON dbo.Brands.BrandID = dbo.Outlets.BrandID 

GROUP BY 
Orders.OrderID, 
dbo.Orders.DeliveryCharge, 
Orders.Discount, 
Brands.BrandName 

回答

1

可以使用Common Table Expression为您scenairo

With MyGroupCte as 
(
SELECT Brands.BrandName, 
    SUM((OrderDetails.Quantity * OrderDetails.UnitPrice)) + Orders.DeliveryCharge - ((SUM((OrderDetails.Quantity * OrderDetails.UnitPrice)) + Orders.DeliveryCharge) * Orders.Discount/100) AS Amount 

FROM dbo.Orders 

INNER JOIN dbo.Outlets 
    ON dbo.Orders.OutletID = dbo.Outlets.OutletID 


INNER JOIN dbo.OrderDetails 
    ON dbo.OrderDetails.OrderID = dbo.Orders.OrderID 
INNER JOIN dbo.Brands 
    ON dbo.Brands.BrandID = dbo.Outlets.BrandID 

GROUP BY 
Orders.OrderID, 
dbo.Orders.DeliveryCharge, 
Orders.Discount, 
Brands.BrandName 
) 
SELECT BrandName, SUM(Amount) FROM MyGroupCte 
GROUP BY BrandName; 
0

做这样的:

SELECT grp.BrandName,sum(Amount)as Total_Amount from 
(SELECT Brands.BrandName, 
    SUM((OrderDetails.Quantity * OrderDetails.UnitPrice)) + Orders.DeliveryCharge - ((SUM((OrderDetails.Quantity * OrderDetails.UnitPrice)) + Orders.DeliveryCharge) * Orders.Discount/100) AS Amount 

FROM dbo.Orders 

INNER JOIN dbo.Outlets 
    ON dbo.Orders.OutletID = dbo.Outlets.OutletID 


INNER JOIN dbo.OrderDetails 
    ON dbo.OrderDetails.OrderID = dbo.Orders.OrderID 
INNER JOIN dbo.Brands 
    ON dbo.Brands.BrandID = dbo.Outlets.BrandID 

GROUP BY 
Orders.OrderID, 
dbo.Orders.DeliveryCharge, 
Orders.Discount, 
Brands.BrandName) as grp 
group by BrandName