Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Рекурсивный запроc
|
|||
|---|---|---|---|
|
#18+
Здраствуйте , подскажите пожалуйста как можно создать рекурсивный запрос . Смысл такой , мы имеем диапозон между 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2011, 11:37 |
|
||
|
Рекурсивный запроc
|
|||
|---|---|---|---|
|
#18+
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 Как написать запрос отображающий все сразу пути . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2011, 11:47 |
|
||
|
Рекурсивный запроc
|
|||
|---|---|---|---|
|
#18+
Немного непонятно условие, но может быть вот так: Код: 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. ? 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 Как написать запрос отображающий все сразу пути . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2011, 12:46 |
|
||
|
Рекурсивный запроc
|
|||
|---|---|---|---|
|
#18+
А, в первом селекте: select ecp_st from test34 where ecp_nz = 51000 нужно заменить условие where ecp_nz = 51000 на условие, включающее проверку диапазона, ну и, соотвественно, для других строк изменить диапазоны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2011, 12:50 |
|
||
|
Рекурсивный запроc
|
|||
|---|---|---|---|
|
#18+
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. ? 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 отображающий полный путь следования , то есть отобразить полный список станций где останавливаеться (сортируеться , собираеться и т.д) до конечной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2011, 12:56 |
|
||
|
Рекурсивный запроc
|
|||
|---|---|---|---|
|
#18+
maytanet, можно DDL приложить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2011, 16:28 |
|
||
|
Рекурсивный запроc
|
|||
|---|---|---|---|
|
#18+
wpn, вот. пока меня только первые 5 интересуют ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2011, 16:37 |
|
||
|
Рекурсивный запроc
|
|||
|---|---|---|---|
|
#18+
wpn, SQL Manager for DB2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2011, 16:42 |
|
||
|
Рекурсивный запроc
|
|||
|---|---|---|---|
|
#18+
если я правильно понял задачу можно попробовать как-то так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2011, 05:19 |
|
||
|
Рекурсивный запроc
|
|||
|---|---|---|---|
|
#18+
risfekесли я правильно понял задачу можно попробовать как-то так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Нет мне не это нужно 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 который показывал бы все маршруты до конечной станции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2011, 10:35 |
|
||
|
Рекурсивный запроc
|
|||
|---|---|---|---|
|
#18+
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. результат: ecp_st ecp_nz1900019380193806000600051000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2011, 15:11 |
|
||
|
Рекурсивный запроc
|
|||
|---|---|---|---|
|
#18+
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. результат: ecp_st ecp_nz1900019380193806000600051000 вот... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2011, 16:06 |
|
||
|
Рекурсивный запроc
|
|||
|---|---|---|---|
|
#18+
maytanet, вот в формате sql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2011, 16:09 |
|
||
|
Рекурсивный запроc
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2011, 16:24 |
|
||
|
Рекурсивный запроc
|
|||
|---|---|---|---|
|
#18+
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 Чем не подошел последний пример? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2011, 16:33 |
|
||
|
Рекурсивный запроc
|
|||
|---|---|---|---|
|
#18+
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". Список возможных правильных элементов: ") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2011, 17:03 |
|
||
|
Рекурсивный запроc
|
|||
|---|---|---|---|
|
#18+
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 что помог ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2011, 13:27 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=37348291&tid=1602195]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 15ms |
| total: | 172ms |

| 0 / 0 |
