powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / JOIN
2 сообщений из 2, страница 1 из 1
JOIN
    #39955470
SHKoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребят, выручайте, пожалуйста...

То ли я забыл, то ли я не знал никогда как решить такую задачку:

есть таблица договоров, где
i_agg - индекс,
b_agg - дата начала действия договора,
e_agg - дата окончания действия договора
Далее собрал в СТЕ

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
   with cte (i_agg, b_agg, e_agg) as (
   select 1, '2019-01-01','2023-12-31' union all
   select 2, '2018-07-10','2023-07-09' union all
   select 3, '2018-12-19','2023-12-18' union all
   select 4, '2019-01-11','2024-01-10' union all
   select 5, '2019-01-15','2024-01-14' union all
   select 6, '2018-12-14','2023-12-13' union all
   select 7, '2018-11-20','2023-11-19' union all
   select 8, '2018-12-19','2023-12-18' union all
   select 9, '2018-11-28','2020-11-27' union all
   select 10, '2019-01-31','2024-01-30'
   )




И есть табличная функция, где параметрами дата начала действия договора и дата окончания договора

Код: sql
1.
   select * from dbo.uf_Graf_PG('2019-01-01', '2023-12-31')



Получаю график договора по годам:

Код: plaintext
1.
2.
3.
4.
5.
ID	b_period	e_period
1	2019-01-01	2019-12-31
2	2020-01-01	2020-12-31
3	2021-01-01	2021-12-31
4	2022-01-01	2022-12-31
5	2023-01-01	2023-12-31

И есть отчетная дата, которая должна попасть в какой-то определенный элемент графика:
Код: sql
1.
  declare @pParam date = '2020-04-30'



В
Код: plaintext
1.
2.
ID	b_period	e_period
2	2020-01-01	2020-12-31

Код: sql
1.
2.
3.
4.
5.
6.
  declare @pParam date = '2020-04-30'
   select 	
        max(b_period) as bpg, 
	min(e_period) as epg
   from dbo.uf_Graf_PG('2019-01-01', '2023-12-31')
   where @pParam between b_period and e_period



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

Собственно то чего я не понимаю как сделать:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
  declare @pParam date = '2020-04-30'

;with cte (i_agg, b_agg, e_agg) as (
   select 1, '2019-01-01','2023-12-31' union all
   select 2, '2018-07-10','2023-07-09' union all
   select 3, '2018-12-19','2023-12-18' union all
   select 4, '2019-01-11','2024-01-10' union all
   select 5, '2019-01-15','2024-01-14' union all
   select 6, '2018-12-14','2023-12-13' union all
   select 7, '2018-11-20','2023-11-19' union all
   select 8, '2018-12-19','2023-12-18' union all
   select 9, '2018-11-28','2020-11-27' union all
   select 10, '2019-01-31','2024-01-30')

    select 
	t.i_agg,
	t.b_period,
	t.e_period,
	max(b_period) as bpg, 
	min(e_period) as epg
   from cte t
   cross join dbo.uffn2_Graf_PG(t.b_agg, t.e_agg)
   where @pParam between d_beg and d_end




Ожидается получить грид
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
i	b_agg		e_agg			b_perriod	e_period
1	2019-01-01	2023-12-31		2020-01-01	2020-12-31
2	2018-07-10	2023-07-09		2019-07-10	2020-07-09
3	2018-12-19	2023-12-18		2019-12-19	2020-12-18
4	2019-01-11	2024-01-10		2020-01-11	2021-01-10
5	2019-01-15	2024-01-14		2020-01-15	2021-01-14
6	2018-12-14	2023-12-13		2019-12-14	2020-12-13
7	2018-11-20	2023-11-19		2019-11-20	2020-11-19
8	2018-12-19	2023-12-18		2019-12-19	2020-12-18
9	2018-11-28	2020-11-27		2019-11-28	2020-11-27
10	2019-01-31	2024-01-30		2020-01-31	2021-01-30


Выручайте, пожалуйста...
Спасибо огромное

@@version:
Microsoft SQL Server 2016 (SP2) (KB4052908) - 13.0.5026.0 (X64)
...
Рейтинг: 0 / 0
JOIN
    #39955473
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cross apply, а не cross join
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / JOIN
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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