powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Агрегирование с обратным накопительным итогом
8 сообщений из 8, страница 1 из 1
Агрегирование с обратным накопительным итогом
    #40107642
Digitalizer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

Имеется код выгрузки таблицы:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
select 	rtrim(substr(to_char(a_date,'mm.yyyy'),1,7)),
		case	when b_date is null then '0'
				when b_date = sysdate then '1'
				when (sysdate-b_date)/30.4167 > 0 and (sysdate-b_date)/30.4167 < 1 then '1'
				else to_char(floor((sysdate-b_date)/30.4167))
		end as M,
		case	
				when substr(t,1,3) in ('999') then 'Title_1'
				when substr(t,2,2) in ('87','88') then 'Title_2'
				when substr(t,3,2) in ('11','13','14','21','23','24') then 'Title_3'
				else null 
		end as Title,
		count(*)
from 	list
where 	a_date between '01012021' and '31122021'
group by 	rtrim(substr(to_char(a_date,'mm.yyyy'),1,7)),
		case	when b_date is null then '0'
				when b_date = sysdate then '1'
				when (sysdate-b_date)/30.4167 > 0 and (sysdate-b_date)/30.4167 < 1 then '1'
				else to_char(floor((sysdate-b_date)/30.4167))
		end,
		case	
				when substr(t,1,3) in ('999') then 'Title_1'
				when substr(t,2,2) in ('87','88') then 'Title_2'
				when substr(t,3,2) in ('11','13','14','21','23','24') then 'Title_3'
				else null 
		end


Прошу помочь дополнить его так, чтобы на выходе получилось суммарное значение по каждому пропущенному M с обратным накопительным итогом.
Пример привел в экселе .
Так же интересует каким образом можно сократить group by заменив там case M и Title? Если просто прописать через запятую их, то ругается на ошибку.
Заранее спасибо.
...
Рейтинг: 0 / 0
Агрегирование с обратным накопительным итогом
    #40107652
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
with t as ( select 	rtrim(substr(to_char(a_date,'mm.yyyy'),1,7)) as d,
		        case	when b_date is null then '0'
				        when b_date = sysdate then '1'
				        when (sysdate-b_date)/30.4167 > 0 and (sysdate-b_date)/30.4167 < 1 then '1'
				        else to_char(floor((sysdate-b_date)/30.4167))
		        end as M,
		        case	
				        when substr(t,1,3) in ('999') then 'Title_1'
				        when substr(t,2,2) in ('87','88') then 'Title_2'
				        when substr(t,3,2) in ('11','13','14','21','23','24') then 'Title_3'
				        else null 
		        end as Title
            from 	list
            where 	a_date between '01012021' and '31122021'
        )
select d, M, Title, count(*) from t group by d, M, Title
...
Рейтинг: 0 / 0
Агрегирование с обратным накопительным итогом
    #40107679
Digitalizer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222, Спасибо. Со вторым моментом разобрались, а как быть с накопительным итогом? ))
...
Рейтинг: 0 / 0
Агрегирование с обратным накопительным итогом
    #40107685
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Digitalizer,

нарастающий итог можно подсчитать при помощи sum() over().
...
Рейтинг: 0 / 0
Агрегирование с обратным накопительным итогом
    #40107719
Digitalizer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,
Получилось, добавил это
Код: sql
1.
2.
coalesce(sum(count(*)) over (partition by title,a_date order by m,a_date,title
rows between unbounded preceding and current row),0) as total


Но как быть с недостающими M?
Я имею ввиду, что есть разрыв между 0 и скажем 10, т.е. M здесь пусто
Mcountsum01010131341023517406545814610450
а мне нужно чтобы они тоже были бы заполнены.
Например вот так:
Mcountsum01010131321331341023517406545745814694610450
...
Рейтинг: 0 / 0
Агрегирование с обратным накопительным итогом
    #40107759
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Digitalizer,

добавьте в запрос таблицу чисел, в которой перечислены все М .
...
Рейтинг: 0 / 0
Агрегирование с обратным накопительным итогом
    #40107926
Digitalizer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов
Digitalizer,

добавьте в запрос таблицу чисел, в которой перечислены все М .

К сожалению М не содержит фиксированных значений, каждый месяц прирастает на +1
...
Рейтинг: 0 / 0
Агрегирование с обратным накопительным итогом
    #40107965
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Digitalizer,

сложно догадаться, судя по вопросу... Перечислите все ожидаемые М на ближайшие 50 лет.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Агрегирование с обратным накопительным итогом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]