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