滚动6个月

时间:2014-08-21 08:26:40

标签: sql date reporting-services ssms

我的报告中有2个参数,月份和年份。

我还有一个表,在一列中包含该特定月份的行数,另一列包含该特定月份和接下来的5个月(滚动6个月)的行数。enter image description here

这两列都有一个表达式链接到参数,如下所示:

月份表达: enter image description here

6个月表达: enter image description here  我的参数使用了我输入的特定值(1 - 12)所以当我的滚动月份每次增加1个值时,你可能会猜到当我接近一年后几个月时这不会起作用,因为我的表达式没有滚动到明年,在12月停止。

enter image description here

概述:参数是1到12的整数值,我不知道如何计算滚动的6个月,这将在一年中选择月份时延续到下一年。例如如果我选择11月作为我的月份参数,我滚动的6个月将只显示11月和12月的行数,而不会显示到下一年。我假设这是因为我的月份值是整数,并且在我的表达式中,我每个月都会为整数添加数字,因此我的滚动6将尝试添加11,12,13,14,15,16个月,显然几个月只会去到12岁。

1 个答案:

答案 0 :(得分:3)

这不是你问题的答案,但是看看这个,你或许可以找到一个SQL本身的解决方案。

请参阅下面的查询。将此视为您的报告源sql。

DECLARE @A TABLE (ID INT IDENTITY(1,1),DT DATE)
INSERT INTO @A (DT) 
VALUES
('2013-01-26'),('2013-02-23'),('2013-03-20'),
('2013-04-23'),('2013-05-23'),('2013-07-23'),
('2013-08-23'),('2013-08-29'),('2013-09-23'),
('2013-12-10'),('2014-03-01')

enter image description here

如果你自己加入结果,有些类似下面的内容,你将在sql查询本身得到结果,你只需要在报告中显示它。见下文。

SELECT  DATEPART(YEAR,DT) [Y],DATEPART(MONTH,DT) [M],COUNT(*) [ROLLING 6] 
FROM    (
        SELECT  A.*
        FROM    @A A,@A B
        WHERE   ((DATEPART(YEAR,B.DT) * 12) + DATEPART(MONTH,B.DT)) BETWEEN 
                (DATEPART(YEAR,A.DT) * 12) + DATEPART(MONTH,A.DT) AND 
                ((DATEPART(YEAR,A.DT) * 12) + DATEPART(MONTH,A.DT) + 6)) LU
GROUP   BY DATEPART(YEAR,DT),DATEPART(MONTH,DT)
ORDER   BY [Y],[M]

enter image description here