Как получить данные за несколько месяцев в несколько столбцов - PullRequest
0 голосов
/ 06 июня 2018

У меня есть пример запроса, как показано ниже,

SELECT SUM(Test) AS TotalLastMonth
FROM Table
WHERE  date >=DATEADD(MONTH, -1, getdate())
GROUP BY InvoiceNo

Результат:

    22
    12
    34
    21
    16
    10
    18

Я пытаюсь получить данные за несколько месяцев в несколько столбцов. Пример вывода

TotalLastMonth TotalLast6Months TotalLast12Months
10              22                   97
12              24                   57
15              30                   63
21              42                   78
25              50                   75

1 Ответ

0 голосов
/ 06 июня 2018

Условное агрегирование будет работать ...

select 
     TotalLastMonth = sum(case when date >= dateadd(month,-1,getdate()) then Test end)
    ,TotalLast6Months = sum(case when date >= dateadd(month,-6,getdate()) then Test end)
    ,TotalLast6Months = sum(case when date >= dateadd(month,-12,getdate()) then Test end)

Если вы хотите, чтобы целые месяцы исключали этот месяц, используйте логику DATEADD, чтобы получить первое и последнее число месяца.

select
     --total last month, not including this month 
     TotalLastMonth = sum(case when date >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0) and date < DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) then Test end)
     --total last 6 months not including this month
    ,TotalLast6Months = sum(case when date >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-6, 0) and date <  DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) then Test end)
     --total last 12 months not including this month
    ,TotalLast6Months = sum(case when date >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-12, 0) and date <  DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) then Test end)
...