Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.12.06;
Скачать: CL | DM;

Вниз

рекурсия, CTE и сортировка как в оракле   Найти похожие ветки 

 
Медвежонок Пятачок ©   (2008-12-31 13:07) [0]

Имеем запрос, использующий cte: /*mssql2005*/
with testtest(id, pid, level) as
(
select id, pid, 0 as level
from test
where pid is null
  union all
select e.id, e.pid, level + 1
from test e
join testtest d on e.pid = d.id
)
select * from testtest

Можно ли наточить запрос (тот что выше) так, чтобы он сортировал записи древовидного запроса аналогично оракловому :

select t.*,level from test t
connect by prior id=pid start with pid is null

то есть требуется чтобы было :
первый рутовый элемент, все его дети и дети их детей, затем следующий рутовый элемент и т.д


 
Медвежонок Пятачок ©   (2008-12-31 13:52) [1]

пока удалось забацать это через производные строковые поля
но может есть способ понативнее?

WITH menu_tree(id, pid, caption, mlevel) AS
(
SELECT ID, PID, caption, cast("0" + cast(id as varchar(10)) as varchar(10)) AS mlevel
FROM menu
WHERE PID IS NULL
  UNION ALL
SELECT e.ID, e.PID, e.caption, cast(mlevel + cast(e.id as varchar(10)) as varchar(10)) as mlevel
FROM menu e
JOIN menu_tree d
ON e.pid = d.id
)
SELECT *
FROM menu_tree order by mlevel


 
Johnmen ©   (2009-01-03 01:58) [2]

Это что? Типа давайте наморщим лоб? Срочное письмо Билу?
Ты бы БД попроще делал, и нормализацию соблюдал. Глядишь, и вопросов бы нЕ было...


 
Поросенок Винни-Пух ©   (2009-01-03 14:04) [3]

скажи проще: ты в этом ни бум-бум и тебе лично такое никогда в голову не приходило.

нормализацию еще приплел. пипец....


 
Поросенок Винни-Пух ©   (2009-01-03 14:10) [4]

Ты бы БД попроще делал

нафик залезать в ветку, если для тебя табличка

id,pid,caption

выглядит сложной?


 
ANB   (2009-01-05 17:05) [5]


> Медвежонок Пятачок ©   (31.12.08 13:52) [1]

В оракле order by по connect by тоже нетривиальная задачка. До 10-ки никак не работала. Без сортировки выдавалось все по уровням, но даже отсортировать по алфавиту внутри ветки не получалось.
Помогало создание индекса типа PID, CAPTION, но не гарантировалось, что всегда будет работать.

Вывод - работает хоть так и будь счастлив :)



Страницы: 1 вся ветка

Текущий архив: 2009.12.06;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.013 c
8-1184697814
opoloXAI
2007-07-17 22:43
2009.12.06
MMSystem.pas => waveInGetNumDevs / waveInGetID


4-1223891391
Игорь
2008-10-13 13:49
2009.12.06
NtQuerySystemInformation


4-1223554921
МистерТ
2008-10-09 16:22
2009.12.06
COM-порт изменение скорости при синхронном режиме работы


6-1180454227
AlexanderMS
2007-05-29 19:57
2009.12.06
Работа с локальной сетью.


2-1255952808
Fedor
2009-10-19 15:46
2009.12.06
Нажать кнопку ОК в javascript окне WebBrowser а