SQL报告,组合多个数据集以实现移动平均
您好,我对SQL报告非常陌生,但我似乎遇到了一个难题(至少我认为是;-),希望有人能证明我错了!) 我正在创建一份“年初至今”报告,其中包含12个月的移动平均值。这要求我查询23个月前的所有可用结果(因为我报告中的oldes值是12个月前的)。 我现在解决这个问题的方法(有效)是创建24个数据集,每个数据集比另一个数据集提前一个月查询。所以ds1:查询这个月,ds2:查询上个月。。。ds24:23个月前的查询 问题是:有没有一种方法可以在一个查询中组合这一点 该表如下所示:SQL报告,组合多个数据集以实现移动平均,sql,ssrs-2008,Sql,Ssrs 2008,您好,我对SQL报告非常陌生,但我似乎遇到了一个难题(至少我认为是;-),希望有人能证明我错了!) 我正在创建一份“年初至今”报告,其中包含12个月的移动平均值。这要求我查询23个月前的所有可用结果(因为我报告中的oldes值是12个月前的)。 我现在解决这个问题的方法(有效)是创建24个数据集,每个数据集比另一个数据集提前一个月查询。所以ds1:查询这个月,ds2:查询上个月。。。ds24:23个月前的查询 问题是:有没有一种方法可以在一个查询中组合这一点 该表如下所示: DATE
DATE ID VALUE DESCRIPTION
1/1/2012 12 'Text here' 'Text here'
SELECT COUNT Date, ID, Value, Description
FROM Table
WHERE (Date BETWEEN @parFrom AND DATEADD(month, 1, @parFrom))
AND description = 'Text here'
(简化后,有一些内部联接和更多参数)查询如下:
DATE ID VALUE DESCRIPTION
1/1/2012 12 'Text here' 'Text here'
SELECT COUNT Date, ID, Value, Description
FROM Table
WHERE (Date BETWEEN @parFrom AND DATEADD(month, 1, @parFrom))
AND description = 'Text here'
我之所以需要这样做,是因为当您没有包含所有可用值的数据集时,显然不可能生成图形
希望有人能帮上忙:)我想您正在寻找将所有表格合并为一个表格的方法。我说得对吗。如果是的话 例如,可以通过联合查询来组合多个查询的结果。这里有一个问题
SELECT colA, colB FROM tableA WHERE colA > 1
UNION
SELECT colX, colA FROM tableB WHERE colA > 1
这里有一些样品可以帮助你
我喜欢在这样的查询中使用通用表表达式来表示日期。根据您的源表,这可能不是最简单的答案,但它完全适用于所有用途:
CREATE TABLE #Events
(id INT IDENTITY,
EventTypeID INT,
EventDate DATETIME)
INSERT INTO #Events
( EventTypeID, EventDate )
VALUES
( 32, '2012-1-1' ),
( 4, '2012-1-1' ),
( 5, '2012-2-3' ),
( 4, '2012-2-25' ),
( 34, '2012-3-1' ),
( 4, '2012-4-3' ),
( 4, '2012-4-16' )
;
WITH MonthsCTE
AS ( SELECT
1 AS ID ,
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) AS MonthStart ,
DATEADD(YEAR, -1,
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)) AS YearEarlier
UNION ALL
SELECT
ID + 1 ,
DATEADD(MONTH, -1, MonthStart) ,
DATEADD(YEAR, -1, DATEADD(MONTH, -1, MonthStart))
FROM
MonthsCTE
WHERE
DATEADD(MONTH, -1, MonthStart) > DATEADD(YEAR, -1, GETDATE())
)
SELECT
MonthStart ,
COUNT(#Events.EventTypeID) AS TotalOccurances,
COUNT(#Events.EventTypeID) /12 AS AverageOccurances
FROM
MonthsCTE
LEFT OUTER JOIN #Events
ON #Events.EventDate BETWEEN YearEarlier AND MonthStart
AND #Events.EventTypeID = 4
GROUP BY
MonthStart
DROP TABLE #Events
在上面,我正在构建一个CTE(如果你不熟悉的话,可以考虑临时表),其中包括过去12个月和之前一年的日期
然后,第二个查询将该表连接到您的数据,允许CTE中字段之间的任何数据。表中每月只有一个值吗?您好,谢谢,但是我的表没有现成的值。。我必须选择一些情况(x),其中一个陈述为真。例如,我的数据库中发生事件的记录数(我可以通过查询“事件”的值字段来确定)。其中(x)是的,这已经在我的查询中的联接条件中:
yourTable.Description='Text here'
如果您希望我的示例与您的数据更紧密地匹配,请编辑您的问题以提供表的相关详细信息d希望有一些示例数据。是的,我的查询将平均每个月跨多个值。嗨,Jamie,好的,这是我的表的极其简化的格式,包括一些虚构的数据,应该会给你一个很好的想法。表“事件”ID EventTypeID DATE 1 32 01/01/2012 2 4 01/20/2012 3 5 02/03/2012 4 02/15/2012 5 34 03/01/2012 6 4 04/03/2012 7 4 04/16/2012等我想查询事件类型编号为4的记录数的移动平均值。因此为11月,2月1日,3月无,4月2日。感谢您的回复!感谢!:)您的样本数据平均值将始终小于。12个月内的5:4事件将归零。答案已更改,以获取移动平均值和总发生次数。嘿,谢谢你的回答。。它不能像我想的那样工作。。我只能这样定义一列,对吗?我需要的结果显示如下:月值9月5日8月3日7月1日等。。。