2017-03-04 29 views
0

必须找到总总销售额作出并获得总折扣,在2002年及2002年销售集中......枢轴还是转置?

表1还当月:的SalesOrderDetail

 - UnitPrice 
     - UnitPriceDiscount 
     - OrderQty 

表2:SalesOrderHeader的

 - OrderDate 

附上的是这两个表的模式的捕捉

https://i.stack.imgur.com/f2b5A.png

我能设法得到的结果seperately但不理解如何 结合/聚集他们....是否使用转或转动......

#Yearly

select DATE_FORMAT(a.OrderDate,'%Y') AS Yearly,sum(b.UnitPriceDiscount) as DiscTotal, 
SUM((`UnitPrice` * OrderQty)-UnitPriceDiscount) AS total 

FROM SalesOrderHeader a join SalesOrderDetail b 

on b.SalesOrderID = a.SalesOrderID 

WHERE YEAR(OrderDate) = 2002 

group by Yearly 

order by MONTH(OrderDate) 

#CurMonthOfYear

select DATE_FORMAT(a.OrderDate,'%M') AS CurrentMonth,sum(b.UnitPriceDiscount) as DiscountAmt, 
SUM((`UnitPrice` * OrderQty)-UnitPriceDiscount) AS total 

FROM SalesOrderHeader a join SalesOrderDetail b 

on b.SalesOrderID = a.SalesOrderID 

WHERE month(OrderDate) = MONTH(NOW()) 

**的结果应该是以下格式**

Metrics    Yearly    CurMonthOfYear 

DiscountAmt   540.82       28.48 

TotalSales   303.17      237.2 

回答

1

你的问题建议有条件的聚集。然而,这是最简单的投入四列:

select sum(sod.UnitPriceDiscount) as DiscTotal_year, 
     sum((UnitPrice * OrderQty) - UnitPriceDiscount) AS total_year, 
     sum(case when month(sod.OrderDate) = month(now()) 
       then sod.UnitPriceDiscount else 0 
      end) as DiscTotal_month, 
     sum(case when month(sod.OrderDate) = month(now()) 
       then (UnitPrice * OrderQty) - UnitPriceDiscount else 0 
      end) as Total_month 
from SalesOrderHeader soh join 
    SalesOrderDetail sod b 
    on sod.SalesOrderID = soh.SalesOrderID 
where year(soh.OrderDate) = 2002 ; 

虽然可以转动这得到它在不同的行,这将使查询更复杂。

1
select a.Metrics , a.yearly , b.CurMonthOfyear FROM 
(
select 'DiscountAmt' as Metrics , sum(b.UnitPriceDiscount) as yearly 
FROM SalesOrderHeader a join SalesOrderDetail b 
on b.SalesOrderID = a.SalesOrderID 
WHERE YEAR(OrderDate) = 2002 

union all 

select 'TotalSales' as Metrics , SUM((b.UnitPrice * b.OrderQty)-b.UnitPriceDiscount) AS yearly 
FROM SalesOrderHeader a join SalesOrderDetail b 
on b.SalesOrderID = a.SalesOrderID 
WHERE YEAR(OrderDate) = 2002 

)a 

inner join 
(
select 'DiscountAmt' as Metrics , sum(b.UnitPriceDiscount) as CurMonthOfyear 
FROM SalesOrderHeader a join SalesOrderDetail b 
on b.SalesOrderID = a.SalesOrderID WHERE month(OrderDate) = MONTH(NOW()) 

union all 

select 'TotalSales' as Metrics , SUM((b.UnitPrice * b.OrderQty)-b.UnitPriceDiscount) AS CurMonthOfyear 
FROM SalesOrderHeader a join SalesOrderDetail b 
on b.SalesOrderID = a.SalesOrderID 
WHERE month(OrderDate) = MONTH(NOW()) 
) 

b ON a.Metrics = b.Metrics 

这不是透视或转置,但查询有助于获得所需格式的输出。

+0

@ Pierre.Vriens它没有透视或转置,但查询有助于获得所需格式的输出。 –