2015-03-25 43 views
0

我有一个表,像下面的存储数据:SQL Server 2008中:CASE WHEN自动递增/组数据

MonthOpened | MONTH | Collected 
-------------------------------- 
01/05/2012 | 1 | £10.00 
01/05/2012 | 2 | £30.00 
01/05/2012 | 3 | £30.00 
01/05/2012 | 4 | £30.00 
01/05/2012 | 5 | £30.00 
01/05/2012 | 6 | £10.00 
01/05/2012 | 7 | £30.00 
01/05/2012 | 8 | £50.00 
01/05/2012 | 9 | £10.00 
01/05/2012 | 10 | £50.00 
01/05/2012 | 11 | £100.00 
01/05/2012 | 12 | £141.92 
01/05/2012 | 13 | £100.00 
01/05/2012 | 14 | £50.00 

月开业的日期在那里取出账户,每月为他们支付的月(月1是帐户开立的月份(5月),月份2月份为6月份,月份3月份为7月份等等。此时此过程一直持续到月份36.

仅供参考此数据进入SSRS矩阵并且看起来像这样

MONTH  |1  |2  |  3|  4|  5|  6|  7|  8|  9| 10|  11|  12|  13| 14 
---------------------------------------------------------------------------------------------------------------- 
01/05/2012|£10.00|£30.00|£30.00|£30.00|£30.00|£10.00|£30.00|£50.00|£10.00|£50.00|£100.00|£141.92|£100.00|£50.00 

我被要求在12个月后将它们组合在一起,因此1-12出现,然后18,24,30,36等等。我做一个通用的情况下,当

CASE 
    WHEN ISNULL(sp.Month, N'01') BETWEEN 01 AND 12 
     THEN ISNULL(sp.Month, N'01') 
    WHEN ISNULL(sp.Month, N'01') BETWEEN 13 AND 18 
     THEN 18 
    WHEN ISNULL(sp.Month, N'01') BETWEEN 19 AND 24 
     THEN 24 
    WHEN ISNULL(sp.Month, N'01') BETWEEN 25 AND 30 
     THEN 30 
    WHEN ISNULL(sp.Month, N'01') BETWEEN 31 AND 36 
     THEN 36 
    ELSE '' 
END AS MONTH 

但是我需要得到它,使它的汽车企业集团,这样只有在账户未来几个月(42,48,54,60这样做是速战速决。 ...),但我需要能够在SSRS查询窗口中执行此操作,并且无法找到使其工作的方法。

回答

0

如果您需要按每12个分组进行分组,然后做一个整数除以12的月份除以1,会给您它们所属的间隔。
然后,您可以按该间隔进行分组。

例如:
第1个月将(1-1)/12 = 0,这将是您的第一间隔
第2个月将(2-1)/12 = 0尽管如此第一间隔
月13将(13 - 1)/12 = 1秒间隔的开始
月36将(36 -1)/12 = 2第三区间的开始

等等等等?这样你就不必无限期地处理了。

+0

@ allan-s-hansen我需要能够自己显示前12个月,然后在12个月后每6个组合一次 – GPH 2015-03-25 08:06:17

+0

如果间隔时间仅为6个月,则可以使用6得到间隔数字。如果你想省略前12个(2个间隔),那就用一个案例来做。但是做这个分区,所以你可以通过编程来获得间隔时间,这可以帮助你简化查询 – 2015-03-25 08:07:37