多个查询的平均值

时间:2014-04-07 22:17:01

标签: sql tsql subquery average divide

我正在使用Microsoft SQL Server 2008

我试图获得前3个月的平均利润,然后从上个月获得利润,然后我想进行计算以比较上个月的利润与前3个月的平均值。

所以例子:

当月利润的总和-2 当月利润的总和-3 当月-4的利润总和

平均值(当月利润总和-2 +当月利润总和-3 +当月利润余额-4)=前3个月平均值

前3个月的平均值/上个月的利润总和=差异

我到目前为止的代码是:

select SUM(profit)as 'threemonthavg'
from invoices
where DATEPART(MM, SHIPPED_DATE) = DATEPART(MM, Dateadd(MM, -2, getdate()))
and DATEPART(YYYY, shipped_date) = DATEPART(YYYY, Dateadd(MM, -2, getdate()))
union
select SUM(profit)
from invoices
where DATEPART(MM, SHIPPED_DATE) = DATEPART(MM, Dateadd(MM, -3, getdate()))
and DATEPART(YYYY, shipped_date) = DATEPART(YYYY, Dateadd(MM, -3, getdate()))
union
select SUM(profit)
from invoices
where DATEPART(MM, SHIPPED_DATE) = DATEPART(MM, Dateadd(MM, -4, getdate()))
and DATEPART(YYYY, shipped_date) = DATEPART(YYYY, Dateadd(MM, -4, getdate()))

这给了我3个单元中每个月的利润总和。完善。现在我想平均这些数字,所以我把它放在子查询中:

select AVG([threemonthavg])
from
(
select SUM(profit) as 'threemonthavg'
from invoices
where DATEPART(MM, SHIPPED_DATE) = DATEPART(MM, Dateadd(MM, -2, getdate()))
and DATEPART(YYYY, shipped_date) = DATEPART(YYYY, Dateadd(MM, -2, getdate()))
union
select SUM(profit)
from invoices
where DATEPART(MM, SHIPPED_DATE) = DATEPART(MM, Dateadd(MM, -3, getdate()))
and DATEPART(YYYY, shipped_date) = DATEPART(YYYY, Dateadd(MM, -3, getdate()))
union
select SUM(profit)
from invoices
where DATEPART(MM, SHIPPED_DATE) = DATEPART(MM, Dateadd(MM, -4, getdate()))
and DATEPART(YYYY, shipped_date) = DATEPART(YYYY, Dateadd(MM, -4, getdate()))
)x

...所以现在我的平均水平了。现在我需要上个月的利润很容易获得,但是如何将上述查询与上个月的利润查询合并以执行除法计算?我尝试了很多连接,但我无法正确使用语法。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

为每个查询声明变量以存储到查询结果然后执行划分。这里几个声明变量的例子...........

DECLARE @iVariable INT,@ vVariable VARCHAR(100),@ dDateTime DATETIME

SET @iVariable = 1

SET @vVariable ='myvar'

SET @dDateTime = GETDATE()

SELECT @iVariable iVar,@ vVariable vVar,@ dDateTime dDT

GO