Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2021, 13:52   #1
Digitalizer
 
Регистрация: 29.10.2021
Сообщений: 4
По умолчанию Суммирование по условиям из одной таблицы в другую

Добрый день,

Прошу помочь, чет никак не догоняю. Имеются две таблицы.
Первая:
Код:
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
		a.title,
                a.code,
		rtrim(substr(to_char(a.date,'mm.yyyy'),1,7)) as d_a_date,
		case	when a.b_date is null then '0'
				when a.b_date = a.c_date then '1'
				else to_char(ceil((a.c_date-a.b_date)/30.4167))
		end as d_M
from 	d_list a
where 	trunc(d_a_date,'ddd') between '01012021' and '31032021';
По условиям из первой
Код:
d=d_a_date and Title=a.title and M=>d_M
нужно прицепить суммарное значение ко второй.
Digitalizer вне форума Ответить с цитированием
Старый 29.10.2021, 20:56   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
select t...., s...., sum(s....)
from ( ... ) t
inner join ( ... 
             ) s on t.d =s.date and t.title=stitle and t.m=s.d_m
group by t...., s.....
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 02.11.2021, 06:46   #3
Digitalizer
 
Регистрация: 29.10.2021
Сообщений: 4
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Код:
select t...., s...., sum(s....)
from ( ... ) t
inner join ( ... 
             ) s on t.d =s.date and t.title=stitle and t.m=s.d_m
group by t...., s.....
Прошу прощения, а можно поподробней как это реализовать?
Digitalizer вне форума Ответить с цитированием
Старый 02.11.2021, 09:12   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Имеются две таблицы.
Цитата:
По условиям из первой
Цитата:
Код:
from ( ... ) t
inner join ( ... 
             ) s on t.d =s.date and t.title=stitle and t.m=s.d_m
соединение первой и второй таблицы по указанному условию
Цитата:
Код:
select t...., s...., sum(s....)
...
group by t...., s.....
получение "суммирущего" поля с группировкой
Цитата:
нужно прицепить суммарное значение ко второй.
или же возможно так
Код:
select t.*, s.*
from (select ... -- первая таблица
      ) t
inner join ( select sum(...), ....  -- суммы по второй таблице с полями присоединения
             ...
             group by ... --по полям присоединения
            ) s on s... =t.... and ... --и само соединение
Код:
select ...., -- поля первой таблицы
s.rs --суммы второй таблицы
from ... --формирование первой таблицы
inner join ( -- см. выше 
             select sum(...) rs, ... 
             ...
             group by ...
           ) s on s....=.... and ....
where ....
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 02.11.2021 в 09:20.
evg_m вне форума Ответить с цитированием
Старый 03.11.2021, 06:50   #5
Digitalizer
 
Регистрация: 29.10.2021
Сообщений: 4
По умолчанию

Получилось выгрузить, но почему то отсутствует столбец sum(vol.cnt)
Подскажите, что не так?
Код:
select inc.a_code, inc.title, inc.adate, inc.M, inc.v_v, inc.lenght, sum(vol.cnt)
from	(select distinct
			case	when substr(a.t,1,3) in ('999') then 'Title_1'
				        when substr(a.t,2,2) in ('87','88') then 'Title_2'
				        when substr(a.t,3,2) in ('11','13','14','21','23','24') then 'Title_3'
				        else null 
			end as title,
			a.kd||a.df||a.md as a_code,
			substr(to_char(a.adate,'dd.mm.yyyy'),1,7) as adate,
			case	when a.bdate is null then '0'
				when a.bdate = a.cdate then '1'
				else to_char(ceil((a.cdate-a.bdate)/30.4167))
		end as M,
			rtrim(a.ko||o.ta||o.ma||o.sh0||o.sh) as v_v,
			a.lp as lenght
		from 	list_a a, list_b o 
		where 	trunc(a.dv,'ddd')			BETWEEN '01032021' AND '01032021' and
				a.sh=o.sh(+) and
				a.ta=o.ta(+) and
				a.ma=o.ma(+) and
				((a.kg not in ('15','16','18','25')) or (a.kg in ('11'))))
inc inner join (select rtrim(substr(to_char(dv,'mm.yyyy'),1,7)) as adate,
						case	when bdate is null then '0'
				        when bdate = sysdate then '1'
				        when (sysdate-bdate)/30.4167 > 0 and (sysdate-bdate)/30.4167 < 1 then '1'
				        else to_char(floor((sysdate-bdate)/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,
						'1' as cnt
				from 	list_b
				where 	adate between '01032021' and '31032021')
vol on (vol.M>=inc.M and inc.title=vol.title and vol.adate=inc.adate)
group by inc.a_code, inc.title, inc.adate, inc.M, inc.v_v, inc.lenght;

Последний раз редактировалось Digitalizer; 03.11.2021 в 06:53.
Digitalizer вне форума Ответить с цитированием
Старый 08.11.2021, 13:25   #6
Digitalizer
 
Регистрация: 29.10.2021
Сообщений: 4
По умолчанию

Давайте я постараюсь объяснить какие входные данные, и какие должны получится выходные.
Таблица cte1 - vol
Таблица cte2 - inc

Так вот, мне необходимо суммировать значения поля quantity из cte1 и вставить его в таблицу cte2, по условиям:
inc_title = vol_title
inc_M >= vol_M
inc_adate = vol_date

Должно получится так.
Например первая строчка, 478 получилось по условиям совпадения title_1 и 03.2021, а M нужно суммировать все что больше и равно 0 -> 21+434+23
Изображения
Тип файла: png 1.png (5.0 Кб, 23 просмотров)
Тип файла: png 2.png (11.8 Кб, 22 просмотров)
Тип файла: png 3.png (13.2 Кб, 22 просмотров)
Digitalizer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скопировать id с одной таблицы на другую таблицу другую форму Staziah2 БД в Delphi 1 08.09.2015 09:14
Перемещение ОДНОЙ записи из одной таблицы в другую Vongud БД в Delphi 28 10.04.2015 21:47
MS SQL SERVER 2005 копирование таблицы из ОДНОЙ БД В другую или перенести все строки из одной таблицы в другую reihtmonbern БД в Delphi 4 17.07.2012 23:25
Данные из одной таблицы в другую chircov090993 Компоненты Delphi 5 12.06.2012 00:26
Передача данных из одной таблицы в другую, при выборе одной ячейки MickMick Microsoft Office Excel 6 06.10.2008 13:57