Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Rollup - Сделать группировку с подитогами по году, полугодию, кварталу, месяцу...  [new]
avpetrov27
Member

Откуда:
Сообщений: 18
Всем привет!

Есть таблица с данными:
create table Table1
(_date datetime,
_value int)
insert into Table1 values ('01-01-2018', 9)
insert into Table1 values ('07-01-2018', 8)
insert into Table1 values ('02-02-2018', 7)
insert into Table1 values ('28-02-2018', 6)
insert into Table1 values ('01-03-2018', 5)
insert into Table1 values ('01-06-2018', 5)
insert into Table1 values ('01-07-2018', 5)
insert into Table1 values ('01-08-2018', 5)
insert into Table1 values ('01-09-2018', 5)
insert into Table1 values ('31-12-2018', 5)

Задача: Нужно получить сумму по _value с подитогами.
Скрипт:
select 
	year(_date) as _year,
	(datepart(quarter, _date)-1)/2 + 1 as _halfYear,
	datepart(quarter, _date) as _quarter,
	month(_date) as _month,
	sum(_value) as _Sum
from Table1
group by
	year(_date),
	rollup(
	(datepart(quarter, _date)-1)/2 + 1,
	datepart(quarter, _date),
	month(_date)
	)

Результат:
_year	halfYear	_quarter	_month	_Sum
2018	1	1	1	17
2018	1	1	2	13
2018	1	1	3	5
2018	1	1	NULL	35
2018	1	2	6	5
2018	1	2	NULL	5
2018	*NULL	NULL	NULL	40
2018	2	3	7	5
2018	2	3	8	5
2018	2	3	9	5
2018	2	3	NULL	15
2018	2	4	12	5
2018	2	4	NULL	5
2018	*NULL	NULL	NULL	20
2018	NULL	NULL	NULL	60

Проблема: В строках подитогов полугодий - отображается NULL-значения(выделил *), а не номер полугодия.
Подскажите, как можно корректно переписать условие на группировку полугодия?
Спасибо.
3 ноя 18, 14:00    [21723243]     Ответить | Цитировать Сообщить модератору
 Re: Rollup - Сделать группировку с подитогами по году, полугодию, кварталу, месяцу...  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 53774
а так
with t as
(
select {d '2018-01-01'} as _date, 1 value  union
select {d '2017-01-01'} as _date, 2 value 
),
tt as
(
select 
	year(_date) as _year,
	(datepart(quarter, _date)-1)/2 + 1 as _halfYear,
	 datepart(quarter, _date) as _quarter,
	month(_date) as _month,
    value
 from t
)

select  _year,
	_halfYear,
	_quarter,
	_month,
        sum(value)
from tt
group by
	_year,
	rollup(
        _halfYear,
	_quarter,
	_month
	)
3 ноя 18, 14:10    [21723246]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить