powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Рекурсивный запроc
18 сообщений из 18, страница 1 из 1
Рекурсивный запроc
    #37345846
maytanet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здраствуйте , подскажите пожалуйста как можно создать рекурсивный запрос .
Смысл такой , мы имеем диапозон между ECP1 и ECP2 в котором нам нужно найти значение , допустим 51000 (Ecp_Nz). Путь до этого значение лежит через изменения ECP_ST . Как написать один запрос чтобы на экране результатов отобразилось пути следования до 51000(Ecp_NZ) . Ниже я привел пример как я бы делал через несколько запросов.
select * from DNKBPF.PF where ECP_ST=19000 and 51000 between ECP1 and ECP2 with ur
select * from DNKBPF.PF where ECP_ST=19380 and 51000 between ECP1 and ECP2 with ur
select * from DNKBPF.PF where ECP_ST=60000 and 51000 between ECP1 and ECP2 with ur
...
Рейтинг: 0 / 0
Рекурсивный запроc
    #37345865
maytanet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select * from DNKBPF.PF where ECP_ST=19000 and 51000 between ECP1 and ECP2 with ur
select * from DNKBPF.PF where ECP_ST=19380 and 51000 between ECP1 and ECP2 with ur
select * from DNKBPF.PF where ECP_ST=60000 and 51000 between ECP1 and ECP2 with ur
Тоесть первый запрос
select * from DNKBPF.PF where ECP_ST=19000 and 51000 between ECP1 and ECP2 with ur
показывает мне что на пути была остановка ECP_nz=19380
Я делаю запрос на начало ECP_ST=19380 и попадаю на ECP_nz=60000
ECP_ST=60000 и попадаю ECP_nz=51000

Как написать запрос отображающий все сразу пути .
...
Рейтинг: 0 / 0
Рекурсивный запроc
    #37346009
wpn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немного непонятно условие, но может быть вот так:
Код: plaintext
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.
create table test34( ecp_st integer, ecp_nz integer, ecp1 integer, ecp2 integer)




insert into test34 (ecp_st, ecp_nz, ecp1, ecp2) values
( 19000 ,  19380 ,  40000 ,  60000 )
,( 19380 ,  60000 ,  40000 ,  60000 )
,( 60000 ,  51000 ,  40000 ,  60000 )


select * 
from test34

with eh (ecp_st) as (
select ecp_st
from test34
where ecp_nz =  51000 
union all 
select t1.ecp_st
from eh h
	inner join test34 t1 on t1.ecp_nz = h.ecp_st
)
select *
from eh

?


maytanetselect * from DNKBPF.PF where ECP_ST=19000 and 51000 between ECP1 and ECP2 with ur
select * from DNKBPF.PF where ECP_ST=19380 and 51000 between ECP1 and ECP2 with ur
select * from DNKBPF.PF where ECP_ST=60000 and 51000 between ECP1 and ECP2 with ur
Тоесть первый запрос
select * from DNKBPF.PF where ECP_ST=19000 and 51000 between ECP1 and ECP2 with ur
показывает мне что на пути была остановка ECP_nz=19380
Я делаю запрос на начало ECP_ST=19380 и попадаю на ECP_nz=60000
ECP_ST=60000 и попадаю ECP_nz=51000

Как написать запрос отображающий все сразу пути .
...
Рейтинг: 0 / 0
Рекурсивный запроc
    #37346018
wpn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, в первом селекте:
select ecp_st
from test34
where ecp_nz = 51000
нужно заменить условие where ecp_nz = 51000 на условие, включающее проверку диапазона, ну и, соотвественно, для других строк изменить диапазоны.
...
Рейтинг: 0 / 0
Рекурсивный запроc
    #37346032
maytanet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wpnНемного непонятно условие, но может быть вот так:
Код: plaintext
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.
create table test34( ecp_st integer, ecp_nz integer, ecp1 integer, ecp2 integer)




insert into test34 (ecp_st, ecp_nz, ecp1, ecp2) values
( 19000 ,  19380 ,  40000 ,  60000 )
,( 19380 ,  60000 ,  40000 ,  60000 )
,( 60000 ,  51000 ,  40000 ,  60000 )


select * 
from test34

with eh (ecp_st) as (
select ecp_st
from test34
where ecp_nz =  51000 
union all 
select t1.ecp_st
from eh h
	inner join test34 t1 on t1.ecp_nz = h.ecp_st
)
select *
from eh

?


maytanetselect * from DNKBPF.PF where ECP_ST=19000 and 51000 between ECP1 and ECP2 with ur
select * from DNKBPF.PF where ECP_ST=19380 and 51000 between ECP1 and ECP2 with ur
select * from DNKBPF.PF where ECP_ST=60000 and 51000 between ECP1 and ECP2 with ur
Тоесть первый запрос
select * from DNKBPF.PF where ECP_ST=19000 and 51000 between ECP1 and ECP2 with ur
показывает мне что на пути была остановка ECP_nz=19380
Я делаю запрос на начало ECP_ST=19380 и попадаю на ECP_nz=60000
ECP_ST=60000 и попадаю ECP_nz=51000

Как написать запрос отображающий все сразу пути .

Вообщем смысл такой ....м.... есть начало пути ECP_ST допустим 19000 есть конец пути 51000 , есть диапозон следования допустим машины по этому пути ECP1 и ECP2 , когда следует машина то в определенных промежутках останавливаеться разружаеться собираеться и т.д . А задача написать select отображающий полный путь следования , то есть отобразить полный список станций где останавливаеться (сортируеться , собираеться и т.д) до конечной.
...
Рейтинг: 0 / 0
Рекурсивный запроc
    #37346459
wpn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytanet,

можно DDL приложить?
...
Рейтинг: 0 / 0
Рекурсивный запроc
    #37346475
maytanet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wpn,

вот. пока меня только первые 5 интересуют
...
Рейтинг: 0 / 0
Рекурсивный запроc
    #37346482
maytanet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wpn,

SQL Manager for DB2
...
Рейтинг: 0 / 0
Рекурсивный запроc
    #37347144
risfek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если я правильно понял задачу можно попробовать как-то так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with T (ECP_ST) as (
values ( 19000 )--верхняя граница
union 
values( 19380 ), ( 20000 ),( 50000 )
union 
values( 51000 )--нижняя граница   
)
select * from (
select ECP_ST N,  max(ECP_ST) OVER(order by ECP_ST ROWS  1  FOLLOWING) K
from T
where ECP_ST between  19000  and  51000 
) z where n!=k
...
Рейтинг: 0 / 0
Рекурсивный запроc
    #37347393
maytanet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
risfekесли я правильно понял задачу можно попробовать как-то так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with T (ECP_ST) as (
values ( 19000 )--верхняя граница
union 
values( 19380 ), ( 20000 ),( 50000 )
union 
values( 51000 )--нижняя граница   
)
select * from (
select ECP_ST N,  max(ECP_ST) OVER(order by ECP_ST ROWS  1  FOLLOWING) K
from T
where ECP_ST between  19000  and  51000 
) z where n!=k

Нет мне не это нужно
1.select * from DNKBPF.PF where ECP_ST=19000 and 51000 between ECP1 and ECP2 with ur
Тут я имею ECP_ST начало маршрута , 51000 это конец маршрута который находиться между ECP1 and ECP2 . Когда я делаю этот первый запрос то он мне из ECP1 and ECP2 находит маршрут и выдfет где он был остановлен ECP_NZ. Дальше я делаю другой запрос

select * from DNKBPF.PF where ECP_ST=19380 and 51000 between ECP1 and ECP2 with ur

В котором я заменяю то значение которое я находил в первом ECP_NZ=19380 на ECP_ST=19380 .
Такие запросы я делаю пока ECP_NZ=51000.
И вопрос в том как мне сделать один select который показывал бы все маршруты до конечной станции.
...
Рейтинг: 0 / 0
Рекурсивный запроc
    #37348096
wpn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytanetНет мне не это нужно
1.select * from DNKBPF.PF where ECP_ST=19000 and 51000 between ECP1 and ECP2 with ur
Тут я имею ECP_ST начало маршрута , 51000 это конец маршрута который находиться между ECP1 and ECP2 . Когда я делаю этот первый запрос то он мне из ECP1 and ECP2 находит маршрут и выдfет где он был остановлен ECP_NZ. Дальше я делаю другой запрос

select * from DNKBPF.PF where ECP_ST=19380 and 51000 between ECP1 and ECP2 with ur

В котором я заменяю то значение которое я находил в первом ECP_NZ=19380 на ECP_ST=19380 .
Такие запросы я делаю пока ECP_NZ=51000.
И вопрос в том как мне сделать один select который показывал бы все маршруты до конечной станции.

Привет.
У меня нет DB2 for LUW, поэтому тот ixf файл я никуда импортировать не могу. Проще просто приложить DDL вашей таблицы.
Вот исправленный пример, исходя из того, что я понял:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
create table test34( ecp_st integer, ecp_nz integer, ecp1 integer, ecp2 integer)

insert into test34 (ecp_st, ecp_nz, ecp1, ecp2) values
( 19000 ,  19380 ,  40000 ,  60000 )
,( 19380 ,  60000 ,  40000 ,  60000 )
,( 60000 ,  51000 ,  40000 ,  60000 )


with eh (ecp_st, ecp_nz) as (
   select ecp_st, ecp_nz
   from test34
   where ecp_st =  19000 
      and  51000  between ecp1 and ecp2
   union all 
   select t1.ecp_st, t1.ecp_nz
   from eh h
      inner join test34 t1 on t1.ecp_st = h.ecp_nz
)
select *
from eh

результат:
ecp_st ecp_nz1900019380193806000600051000
...
Рейтинг: 0 / 0
Рекурсивный запроc
    #37348284
maytanet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wpnmaytanetНет мне не это нужно
1.select * from DNKBPF.PF where ECP_ST=19000 and 51000 between ECP1 and ECP2 with ur
Тут я имею ECP_ST начало маршрута , 51000 это конец маршрута который находиться между ECP1 and ECP2 . Когда я делаю этот первый запрос то он мне из ECP1 and ECP2 находит маршрут и выдfет где он был остановлен ECP_NZ. Дальше я делаю другой запрос

select * from DNKBPF.PF where ECP_ST=19380 and 51000 between ECP1 and ECP2 with ur

В котором я заменяю то значение которое я находил в первом ECP_NZ=19380 на ECP_ST=19380 .
Такие запросы я делаю пока ECP_NZ=51000.
И вопрос в том как мне сделать один select который показывал бы все маршруты до конечной станции.

Привет.
У меня нет DB2 for LUW, поэтому тот ixf файл я никуда импортировать не могу. Проще просто приложить DDL вашей таблицы.
Вот исправленный пример, исходя из того, что я понял:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
create table test34( ecp_st integer, ecp_nz integer, ecp1 integer, ecp2 integer)

insert into test34 (ecp_st, ecp_nz, ecp1, ecp2) values
( 19000 ,  19380 ,  40000 ,  60000 )
,( 19380 ,  60000 ,  40000 ,  60000 )
,( 60000 ,  51000 ,  40000 ,  60000 )


with eh (ecp_st, ecp_nz) as (
   select ecp_st, ecp_nz
   from test34
   where ecp_st =  19000 
      and  51000  between ecp1 and ecp2
   union all 
   select t1.ecp_st, t1.ecp_nz
   from eh h
      inner join test34 t1 on t1.ecp_st = h.ecp_nz
)
select *
from eh

результат:
ecp_st ecp_nz1900019380193806000600051000
вот...
...
Рейтинг: 0 / 0
Рекурсивный запроc
    #37348291
maytanet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytanet,
вот в формате sql
...
Рейтинг: 0 / 0
Рекурсивный запроc
    #37348332
maytanet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytanet,

- Имя базы данных: PRIMER
-- Версия менеджера баз данных: DB2/NT Version 9.7.4
-- Кодовая страница базы данных: 1251
-- Последовательность слияния базы данных -: UNIQUE


CONNECT TO PRIMER;



-- Табличное пространство Mimic

ALTER TABLESPACE SYSCATSPACE
PREFETCHSIZE AUTOMATIC
OVERHEAD 7.500000
NO FILE SYSTEM CACHING
AUTORESIZE YES
TRANSFERRATE 0.060000;


ALTER TABLESPACE TEMPSPACE1
PREFETCHSIZE AUTOMATIC
OVERHEAD 7.500000
FILE SYSTEM CACHING
TRANSFERRATE 0.060000;


ALTER TABLESPACE USERSPACE1
PREFETCHSIZE AUTOMATIC
OVERHEAD 7.500000
NO FILE SYSTEM CACHING
AUTORESIZE YES
TRANSFERRATE 0.060000;


------------------------------------------------
-- Операторы DDL для таблицы "DNKBPF "."PF"
------------------------------------------------


CREATE TABLE "DNKBPF "."PF" (
"ID" DECIMAL(16,0) ,
"ECP_ST" INTEGER ,
"ECP1" INTEGER ,
"ECP2" INTEGER ,
"ECP_NZ" INTEGER ,
"ECP_GR" INTEGER ,
"GRUP" INTEGER ,
"TIP" INTEGER ,
"OTCH" CHAR(5) )
IN "USERSPACE1" ;






-- Операторы DDL для индексов таблицы "DNKBPF "."PF"

CREATE INDEX "ADM "."PF_ID" ON "DNKBPF "."PF"
("ID" ASC)
PCTFREE 10 MINPCTUSED 10
...
Рейтинг: 0 / 0
Рекурсивный запроc
    #37348365
wpn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytanetmaytanet,

- Имя базы данных: PRIMER
-- Версия менеджера баз данных: DB2/NT Version 9.7.4
-- Кодовая страница базы данных: 1251
-- Последовательность слияния базы данных -: UNIQUE


CONNECT TO PRIMER;



-- Табличное пространство Mimic

ALTER TABLESPACE SYSCATSPACE
PREFETCHSIZE AUTOMATIC
OVERHEAD 7.500000
NO FILE SYSTEM CACHING
AUTORESIZE YES
TRANSFERRATE 0.060000;


ALTER TABLESPACE TEMPSPACE1
PREFETCHSIZE AUTOMATIC
OVERHEAD 7.500000
FILE SYSTEM CACHING
TRANSFERRATE 0.060000;


ALTER TABLESPACE USERSPACE1
PREFETCHSIZE AUTOMATIC
OVERHEAD 7.500000
NO FILE SYSTEM CACHING
AUTORESIZE YES
TRANSFERRATE 0.060000;


------------------------------------------------
-- Операторы DDL для таблицы "DNKBPF "."PF"
------------------------------------------------


CREATE TABLE "DNKBPF "."PF" (
"ID" DECIMAL(16,0) ,
"ECP_ST" INTEGER ,
"ECP1" INTEGER ,
"ECP2" INTEGER ,
"ECP_NZ" INTEGER ,
"ECP_GR" INTEGER ,
"GRUP" INTEGER ,
"TIP" INTEGER ,
"OTCH" CHAR(5) )
IN "USERSPACE1" ;






-- Операторы DDL для индексов таблицы "DNKBPF "."PF"

CREATE INDEX "ADM "."PF_ID" ON "DNKBPF "."PF"
("ID" ASC)
PCTFREE 10 MINPCTUSED 10

Чем не подошел последний пример?
...
Рейтинг: 0 / 0
Рекурсивный запроc
    #37348430
maytanet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wpn,


with eh (ecp_st, ecp_nz) as ( select ecp_st, ecp_nz from DNKBPF.PF where ecp_st = 19000 and 51000 between ecp1 and ecp2 union all select t1.ecp_st, t1.ecp_nz from eh h inner join DNKBPF.PF t1 on t1.ecp_st = h.ecp_nz )
SQL0104N Обнаружен неправильный элемент ")" после текста "t1.ecp_st =
h.ecp_nz". Список возможных правильных элементов: ")". SQLSTATE=42601

SQL0104N Обнаружен неправильный элемент ")" после текста "t1.ecp_st = h.ecp_nz". Список возможных правильных элементов: ")
...
Рейтинг: 0 / 0
Рекурсивный запроc
    #37349654
maytanet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
with eh (ecp_st, ecp_nz) as (
select p.ecp_st, p.ecp_nz
from DNKBPF.PF P where p.ecp_st = 19000 and 51000 between p.ecp1 and p.ecp2
union all
select p.ecp_st, p.ecp_nz
from DNKBPF.PF p, eh h where p.ecp_st = h.ecp_nz and 51000 between p.ecp1 and p.ecp2
)
select *
from eh

уж незнаю почему join не работал ......попробовал так все заработало......
большое спасбо wpn что помог
...
Рейтинг: 0 / 0
Рекурсивный запроc
    #37351066
maytanet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
подскажите пожалуйста как добавить еще столбец из другой таблицы ....
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Рекурсивный запроc
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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