2015-03-25 4 views
0

У меня есть таблица, которая хранит данные, такие как ниже:SQL Server 2008: случай, когда приращения авто/данные группы

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 - это месяц, в который был открыт счет (май), месяц 2 - июнь, месяц 3 - июль и т. д. На данный момент это продолжается до 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, и havent смог найти способ заставить его работать.

ответ

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 месяцев на своем собственном, а затем группировать каждые 6 после 12 месяцев – GPH

+0

Если интервал составляет всего 6 месяцев, то вы можете сделать деление на 6 для получения интервальных чисел. Если вы затем хотите опустить первые 12 (2 интервала), сделайте это с помощью случая. Но выполнение разделения, чтобы вы могли получить интервал программно, должно помочь вам упростить запрос –