powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / супир иерархия
33 сообщений из 33, показаны все 2 страниц
супир иерархия
    #39384434
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добрый день !

подскажите пожалуйста,

эх..

есть например набор

ord level blabla
1 1 a
2 2 b
3 1 c
4 2 d
5 2 t
6 3 jz
7 3 z
8 3 i
нужно выбрать для каждой строки набор c вышестоящим level , например для
7 3 z

нужно выбрать строки
5 2 t
3 1 c


и результат вывести в одну строку 7 3 z t c

это же при помощи аналитической функции lead ?
...
Рейтинг: 0 / 0
супир иерархия
    #39384435
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ord- уникальный сквозной
...
Рейтинг: 0 / 0
супир иерархия
    #39384452
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в функции lag есть параметр, задающий смещение

к примеру:
LAG(dim_recname,2, null) OVER(ORDER BY ord, level) prev_code

выведет значение на две строки выше, если таког нет- вставит null

теперь как вот подзапросом в колонке селекта вывести в одну строку данные по всем вышестоящим level (( то есть как -то вычислить , сколько их и передать параметр смещения ((

не могу сообразить(
...
Рейтинг: 0 / 0
супир иерархия
    #39384457
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
listagg() within group()
...
Рейтинг: 0 / 0
супир иерархия
    #39384458
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
Код: plsql
1.
listagg() within group()



вообще ничего в интернете не могу найти про listagg
...
Рейтинг: 0 / 0
супир иерархия
    #39384460
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
Код: plsql
1.
listagg() within group()



и она же записывает в строку

а я пока не пойму, как сгруппировать ))
...
Рейтинг: 0 / 0
супир иерархия
    #39384461
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ozornitcaнужно выбрать строки
5 2 t
3 1 cпочему именно 5, а не 4 или 2? Почему 3, а не 1? Оригинальный запрос покажи, который дает тебе такой набор
...
Рейтинг: 0 / 0
супир иерархия
    #39384463
гречка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ozornitca, с таким заголовком темы, тебе место на кухне.
...
Рейтинг: 0 / 0
супир иерархия
    #39384464
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender,

запроса нет. это данные в таблице

данные только отсортированы asc ord,level


суть в том, что так организована иерархия у них

level- показывает уровень
ord- номер строки


итого берем к примеру
набор

ord level blabla
1 1 a
2 2 b
3 1 c
4 2 d
5 2 t
6 3 jz
7 3 z
8 3 i


смотрим для строки
7 3 z

для него ближайший первый верхний уровень строка
5 2 t (максимальный ord. level -1)

следующий ближайший опять с максимальныс ord и level-1 :
3 1 c
...
Рейтинг: 0 / 0
супир иерархия
    #39384465
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гречкаOzornitca, с таким заголовком темы, тебе место на кухне.

идите в ж***
...
Рейтинг: 0 / 0
супир иерархия
    #39384468
Клизма
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ozornitcaидите в ж***
Вот не люблю когда представители женского поля позволяют себе такие выражения. Всегда представляю как она при этом снимает трусы, встает раком и приглашает меня войти в свою ж***.
...
Рейтинг: 0 / 0
супир иерархия
    #39384469
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пф...
...
Рейтинг: 0 / 0
супир иерархия
    #39384470
Клизма
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ozornitcaпф...
Фу, ты еще и пукаешь.
...
Рейтинг: 0 / 0
супир иерархия
    #39384473
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Клизма,

мне с вами говорить не о чем

двери открыты- выходите

пс: форум не для ролевых фантазий, если кто вдруг не заметил
тут серьезный форум о БД и сопутствующем
...
Рейтинг: 0 / 0
супир иерархия
    #39384483
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ozornitcaсупир иерархия

Очень надеюсь это банальная ичепятка. По вопросу:

Код: plsql
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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
with r(
       ord,
       lvl,
       blabla,
       prev_ord,
       prev_lvl
      ) as (
             select  ord,
                     lvl,
                     blabla,
                     ord - 1,
                     lvl - 1
               from  tbl
               where ord = &ord
            union all
             select  r.ord,
                     r.lvl,
                     case t.lvl
                       when r.prev_lvl then r.blabla || ' ' || t.blabla
                       else r.blabla
                     end,
                     t.ord - 1,
                     case t.lvl
                       when r.prev_lvl then t.lvl - 1
                       else r.prev_lvl
                     end
               from  r,
                     tbl t
               where r.prev_lvl > 0
                 and t.ord = r.prev_ord
           )
select  ord,
        lvl,
        blabla
  from  r
  where prev_lvl = 0
/
Enter value for ord: 7
old  14:                where ord = &ord
new  14:                where ord = 7

        ORD         LVL BLABLA
----------- ----------- ---------------
          7           3 z t c

SQL> 



SY.
...
Рейтинг: 0 / 0
супир иерархия
    #39384495
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYOzornitcaсупир иерархия

Очень надеюсь это банальная ичепятка. По вопросу:

Код: plsql
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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
with r(
       ord,
       lvl,
       blabla,
       prev_ord,
       prev_lvl
      ) as (
             select  ord,
                     lvl,
                     blabla,
                     ord - 1,
                     lvl - 1
               from  tbl
               where ord = &ord
            union all
             select  r.ord,
                     r.lvl,
                     case t.lvl
                       when r.prev_lvl then r.blabla || ' ' || t.blabla
                       else r.blabla
                     end,
                     t.ord - 1,
                     case t.lvl
                       when r.prev_lvl then t.lvl - 1
                       else r.prev_lvl
                     end
               from  r,
                     tbl t
               where r.prev_lvl > 0
                 and t.ord = r.prev_ord
           )
select  ord,
        lvl,
        blabla
  from  r
  where prev_lvl = 0
/
Enter value for ord: 7
old  14:                where ord = &ord
new  14:                where ord = 7

        ORD         LVL BLABLA
----------- ----------- ---------------
          7           3 z t c

SQL> 



SY.

спасибо!

правда. запрос совсем не работает

там не надо RECURSIVE?

case t.lvl
when r.prev_lvl then r.blabla || ' ' || t.blabla
else r.blabla

синтаксис же case when условие then результат

и я не пойму почему иерархическим запросом все-таки, там же нестандартная иерархия
...
Рейтинг: 0 / 0
супир иерархия
    #39384496
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,
вообще честно говоря очень странный вы написали запрос
...
Рейтинг: 0 / 0
супир иерархия
    #39384497
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и вообще это не оракловый синтаксис,

мне на самом деле надо постгресс скул,

но у вас как будто не совсем постгресскул, но и не оракл- там коннект бай
...
Рейтинг: 0 / 0
супир иерархия
    #39384502
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OzornitcaSY,
вообще честно говоря очень странный вы написали запрос

Этот "очень странный запрос" называется recursive subquery factoring .

А если на самом деле надо постгресс скул то зачем писать на деревню дедушке?

SY.
...
Рейтинг: 0 / 0
супир иерархия
    #39384505
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYOzornitcaSY,
вообще честно говоря очень странный вы написали запрос

Этот "очень странный запрос" называется recursive subquery factoring .

А если на самом деле надо постгресс скул то зачем писать на деревню дедушке?

SY.

на том форуме пока не ответили )

чтобы принцип понять перенести его в постгрескл)

и у меня он пишет что что-то у него не рекурсивное Cast the output of the non-recursive term to the correct type.
...
Рейтинг: 0 / 0
супир иерархия
    #39384514
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,
я не пойму просто,

это же не обычный рекурсивный запрос ?
для рекурсии должен быть столбец, значение которогог равно значению вышестоящей строки

а в моем случае такого столбца-родителя нет


то есть у вас запрос как бы цикл по произвольному условию ?

я тормоз :(
не понимаю
...
Рейтинг: 0 / 0
супир иерархия
    #39384535
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ozornitcaдля рекурсии должен быть столбец, значение которогог равно значению вышестоящей строки


Для рекурсии дoлжна быть формула как из текущeго сдeлать следующее. У тебя следующее это ORD - 1. Начинаем с:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
             select  ord,
                     lvl,
                     blabla,
                     ord - 1,
                     lvl - 1
               from  tbl
               where ord = &ord



Затем добавляем (через UNION ALL) предыдущий ORD:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
             select  r.ord,
                     r.lvl,
                     case t.lvl
                       when r.prev_lvl then r.blabla || ' ' || t.blabla
                       else r.blabla
                     end,
                     t.ord - 1,
                     case t.lvl
                       when r.prev_lvl then t.lvl - 1
                       else r.prev_lvl
                     end
               from  r,
                     tbl t
               where r.prev_lvl > 0
                 and t.ord = r.prev_ord



и если LVL = предыдущий LVL - 1 то конкатенируем BLABLA. Остнавливаемся когда предыдущий LVL = 0.

SY.
...
Рейтинг: 0 / 0
супир иерархия
    #39384541
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYOzornitcaдля рекурсии должен быть столбец, значение которогог равно значению вышестоящей строки


Для рекурсии дoлжна быть формула как из текущeго сдeлать следующее. У тебя следующее это ORD - 1. Начинаем с:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
             select  ord,
                     lvl,
                     blabla,
                     ord - 1,
                     lvl - 1
               from  tbl
               where ord = &ord



Затем добавляем (через UNION ALL) предыдущий ORD:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
             select  r.ord,
                     r.lvl,
                     case t.lvl
                       when r.prev_lvl then r.blabla || ' ' || t.blabla
                       else r.blabla
                     end,
                     t.ord - 1,
                     case t.lvl
                       when r.prev_lvl then t.lvl - 1
                       else r.prev_lvl
                     end
               from  r,
                     tbl t
               where r.prev_lvl > 0
                 and t.ord = r.prev_ord



и если LVL = предыдущий LVL - 1 то конкатенируем BLABLA. Остнавливаемся когда предыдущий LVL = 0.

SY.

у меня по идее предыдущее - не именно ord-1 , а при условии , что текущий level<> предыдущему левелу, и первое предыдущее значение нужно брать с level-1 и максимальным для этой группы ord (при этом данные в исходной выорке из таблицы должны быть отсортированы по ord,level asc)
...
Рейтинг: 0 / 0
супир иерархия
    #39384542
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,
аа сори сори вы написали про левел минус 1
...
Рейтинг: 0 / 0
супир иерархия
    #39384547
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иерархический SQL:

Код: plsql
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.
28.
select  connect_by_root ord ord,
        connect_by_root lvl lvl,
        regexp_replace(
                       sys_connect_by_path(
                                           case lvl
                                             when prior lvl then null
                                             else blabla
                                           end,
                                           ' '
                                          ),
                       '(^| ) *',
                       '\1'
                      ) blabla
  from  tbl
  where connect_by_isleaf = 1
  start with ord = &ord
  connect by ord = prior ord - 1
         and prior lvl != 1
/
Enter value for ord: 7
old  16:   start with ord = &ord
new  16:   start with ord = 7

        ORD         LVL BLABLA
----------- ----------- ---------------
          7           3 z t c

SQL> 



SY.
...
Рейтинг: 0 / 0
супир иерархия
    #39384576
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

спасибо!!! вот в таком варианте заработал корректно в постгрессе )

with RECURSIVE r(
ord,
lvl,
dim_recname,
prev_ord,
prev_lvl
) as (
select ord,
level,
dim_recname,
ord - 1,
level - 1
from f$grouping_fact
where ord <= 5 and dt = to_date('01.04.2016', 'dd.mm.yyyy')
union all
select r.ord,
r.lvl,
case t.level
when r.prev_lvl then CAST (r.dim_recname || ' ' || t.dim_recname AS VARCHAR(200))
else CAST (r.dim_recname AS VARCHAR(200))
end,
t.ord - 1,
case t.level
when r.prev_lvl then t.level - 1
else r.prev_lvl
end
from r,
f$grouping_fact t
where r.prev_lvl > 0
and t.ord = r.prev_ord
and t.ord <= 5 and t.dt = to_date('01.04.2016', 'dd.mm.yyyy')
)
select ord,
lvl,
dim_recname
from r
where prev_lvl = 0


вывел правда не все уровни вложенности, а один предыдущий

мне теперь надо добавить , чтобы в строку писалось столько подряд , сколько уровней (у нас их не больше 3)
...
Рейтинг: 0 / 0
супир иерархия
    #39384577
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,
обожи,

прошу прощения !
все работает наикорректнейше !

спасибо вам большое !!!
...
Рейтинг: 0 / 0
супир иерархия
    #39384637
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ozornitcaспасибо вам большое !!!Наглых безмозглывх дур никто нигде не любит. Лучше иди на кухн у .
...
Рейтинг: 0 / 0
супир иерархия
    #39385540
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicOzornitcaспасибо вам большое !!!Наглых безмозглывх дур никто нигде не любит. Лучше иди на кухн у .

про наглых согласна.

безмозглых любят) а вы кого имеете в виду конкретно? кого-то с форума ?


про кухню- я там бываю периодически, пью чай. А что ? причем тут кухня в контексте темы ?
...
Рейтинг: 0 / 0
супир иерархия
    #39385676
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OzornitcaElicпропущено...
Наглых безмозглывх дур никто нигде не любит. Лучше иди на кухн у .

про наглых согласна.

безмозглых любят) а вы кого имеете в виду конкретно? кого-то с форума ?


про кухню- я там бываю периодически, пью чай. А что ? причем тут кухня в контексте темы ?
если слова коверкаете бездумно ( как в заголовке темы ) то это напрасно и просто глупо
например, поиск
...
Рейтинг: 0 / 0
супир иерархия
    #39386140
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishOzornitcaпропущено...


про наглых согласна.

безмозглых любят) а вы кого имеете в виду конкретно? кого-то с форума ?


про кухню- я там бываю периодически, пью чай. А что ? причем тут кухня в контексте темы ?
если слова коверкаете бездумно ( как в заголовке темы ) то это напрасно и просто глупо
например, поиск

я поняла, на серьезном форуме для того, чтобы другие могли пользоваться моим обсуждением, при необходимости. лучше вести корректную переписку


но за годы интернета это так сложно... адекватно переписываться.... это как секта- попал и пропал. Даже если с русским нет проблем
...
Рейтинг: 0 / 0
супир иерархия
    #39386230
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OzornitcaSY,
обожи,

прошу прощения !
все работает наикорректнейше !

спасибо вам большое !!!

Сударыня, рекомендую посмотреть: HOWTO :: Как правильно задавать вопросы

p.s. Если подготовить тестовые данные, рассказать что Вам нужно, (не то что Вы думаете, а именно постановка задачи). Очень может быть, что Ваша задача решается совсем не так как Вы пытаетесь ее решить.

Покажите правильно оформленный Ваш код (использование ТЭГов) и Вам ответят гораздо охотнее, быстрее и по делу.

Пример тестовый данных и оформление кода Вы можете видеть в сообщении SY.

Удачи
...
Рейтинг: 0 / 0
супир иерархия
    #39391235
Фотография Ozornitca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim LejninOzornitcaSY,
обожи,

прошу прощения !
все работает наикорректнейше !

спасибо вам большое !!!

Сударыня, рекомендую посмотреть: HOWTO :: Как правильно задавать вопросы

p.s. Если подготовить тестовые данные, рассказать что Вам нужно, (не то что Вы думаете, а именно постановка задачи). Очень может быть, что Ваша задача решается совсем не так как Вы пытаетесь ее решить.

Покажите правильно оформленный Ваш код (использование ТЭГов) и Вам ответят гораздо охотнее, быстрее и по делу.

Пример тестовый данных и оформление кода Вы можете видеть в сообщении SY.

Удачи

спасибо!
на самом деле, задача преобразовалась в несколько другой вид )

но уже разобрались )
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / супир иерархия
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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