Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выборка за последние 12 месяцев с учетом отсутствия данных за текущий месяц  [new]
mdm114
Member

Откуда:
Сообщений: 106
Всем добрый день, есть запрос
SELECT 
MONTH(Datе) AS M,
YEAR (Datе) AS Y,
Sum(case when [name]=N'VVV' then sum else 0 end) AS Result
FROM    db
WHERE  (Date >= DATEADD(MONTH, DATEDIFF(MONTH, 0, CURRENT_TIMESTAMP) - 11, 0))
GROUP BY MONTH(Date),YEAR(Date)

Получается
MYResult
16 2018 125640
27 2018 0
38 2018 42813
49 2018 0
510 2018 35225
611 2018 602338
712 2018 169047
81 2019 0
92 2019 200839
103 2019 137594
114 2019 56274
125 2019 34000

Все ОК, только есть одно но!
Если еще нет записей за последний(текущий) месяц выводится 11 значений, а не 12

MYResult
16 2018 125640
27 2018 0
38 2018 42813
49 2018 0
510 2018 35225
611 2018 602338
712 2018 169047
81 2019 0
92 2019 200839
103 2019 137594
114 2019 56274

А хотелось бы при отсутствии данных значений получить таблицу следующего вида,чтобы избежать лишнего кода в программе

MYResult
16 2018 125640
27 2018 0
38 2018 42813
49 2018 0
510 2018 35225
611 2018 602338
712 2018 169047
81 2019 0
92 2019 200839
103 2019 137594
114 2019 56274
125 2019 0 или NULL


Это как то лечится в запросе? Или надо все таки в программе дорабатывать?
15 май 19, 21:44    [21885741]     Ответить | Цитировать Сообщить модератору
 Re: Выборка за последние 12 месяцев с учетом отсутствия данных за текущий месяц  [new]
vikkiv
Member

Откуда: London
Сообщений: 1994
mdm114,

у тебя выборка из фактов, присоедини (outer join) её к нужному диапазону календаря, всё.
15 май 19, 22:08    [21885750]     Ответить | Цитировать Сообщить модератору
 Re: Выборка за последние 12 месяцев с учетом отсутствия данных за текущий месяц  [new]
mdm114
Member

Откуда:
Сообщений: 106
А можно поподробнее? Имеется ввиду, что должна быть какая то связанная таблица? Не совсем понял. Ну или пример какой, чтобы понять в какую сторону смотреть
15 май 19, 22:38    [21885755]     Ответить | Цитировать Сообщить модератору
 Re: Выборка за последние 12 месяцев с учетом отсутствия данных за текущий месяц  [new]
PizzaPizza
Member

Откуда:
Сообщений: 222
mdm114,

В таблице db есть поле date откуда вы берете месяц и год.

Если в этой таблице нет пятого месяца для 19 года, то откуда база его вам выведет?

Сделайте сет с годом и месяцем и присоедините к нему свою таблицу.
15 май 19, 23:21    [21885773]     Ответить | Цитировать Сообщить модератору
 Re: Выборка за последние 12 месяцев с учетом отсутствия данных за текущий месяц  [new]
vikkiv
Member

Откуда: London
Сообщений: 1994
mdm114
...А можно поподробнее?...

например так или так:
with a as(select 1 i union all select i+1 from a where i<12),
b as(select i,month(dateadd(month,i-12,current_timestamp))m,year(dateadd(month,i-12,current_timestamp))y from a),
c as(select m,y,s from(values(2018,8,9999),(2018,11,7777),(2019,3,2222))x(y,m,s))
select i,b.m,b.y,c.s from b left outer join c on b.y=c.y and b.m=c.m
где таблица b это измерение с необходимой длинной/кол-вом строк с полями (номер, месяц, год)
и таблица c это какой-то образец агрегированных фактов которые надо размазать/натянуть на трафарет из 12ти строк
15 май 19, 23:44    [21885782]     Ответить | Цитировать Сообщить модератору
 Re: Выборка за последние 12 месяцев с учетом отсутствия данных за текущий месяц  [new]
vikkiv
Member

Откуда: London
Сообщений: 1994
если обязательно нули нужны (некоторые интерфейсы бывает ругаются) то замени в последней строке c.s на coalesce(c.s,0)s
15 май 19, 23:52    [21885784]     Ответить | Цитировать Сообщить модератору
 Re: Выборка за последние 12 месяцев с учетом отсутствия данных за текущий месяц  [new]
mdm114
Member

Откуда:
Сообщений: 106
спасибо, буду разбираться
16 май 19, 06:42    [21885812]     Ответить | Цитировать Сообщить модератору
 Re: Выборка за последние 12 месяцев с учетом отсутствия данных за текущий месяц  [new]
mdm114
Member

Откуда:
Сообщений: 106
Еще раз спасибо!!! Все фунициклирует в лучшем виде!
16 май 19, 14:56    [21886337]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить