Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
Kipchak2
Member

Откуда: Казахстан, г. Алматы
Сообщений: 12
запрос на Firebird 2.1

    with recursive DTree (disid, parid, lv, statid) as
    (select disid, parid, lv, statid from Distrib where parid = 0
     union all
     select d.disid, d.parid, d.lv, d.statid from Distrib d
       inner join DTree t on (d.ParID = t.DisID)
     )
    select disid, parid, lv, statid from DTree



DISID PARID LV FIO

1 0 0 Êîìïàíèÿ "ÔÈÒÎ Ãàóhàð"
564 1 1 Êîïæàñàðîâ Íóðëàí Êóäàéáåðãåíîâè÷
565 564 2 Ñàéëûáàåâà Íàãèìà Æàíàáàåâíà
566 564 2 Áàëàõîæàåâà Íàçèðà Àáéëàåâíà
567 564 2 Òèëåóáàåâà Çåáåðêóëü
568 567 3 Àëèáàåâà Àëòèíêóëü Íàæìàíîâíà
581 568 4 Áàéìàõàíîâà Ìàéðà Ñåðèêîâíà
569 567 3 Òîëåíîâà Àéíóð Àóåñõàíîâíà
583 569 4 Êóëüæàíîâà Êàëäèêóëü Äæàïïàðîâíà
2 657 583 5 Ìóðàòáàåâà Êóëàèì Àáèåâíà
2 658 2 657 6 Ìàìóíøèêîâ Òóãóíøèê
2 659 2 657 6 Ìóðàòáàåâà Ôàðèäà Òàëãàòîâíà
2 117 569 4 Æóçåíîâà Ïåðíàèì Áåêñóëòàíîâíà
2 212 569 4 Òîëåíîâà Ñàóëå Àóåñõàíîâíà
3 714 2 212 5 Åñåíêóëîâà Àéçàäà Øàéçàíäàåâíà


данные возвращаются по порядку, т.е. правильно!

Теперь обратите внимание на следующий запрос на SQL 2005

  with DTree (disid, parid, lev, fio) as
    (select disid, parid, lev, fio from Distrib where parid = 0
     union all
     select d.disid, d.parid, d.lev, d.fio from Distrib d
       inner join DTree t on (d.ParID = t.DisID)
     )
    select disid, parid, lev, fio from DTree


1 0 0 Компания Табигат
72 1 1 Есмахов Нурлан Маликайдарович
73 1 1 Шораева Патима
90 1 1 Ким Клара Петровна
99 1 1 Имашев Нуржан
164 1 1 Сыбанбаева Ляззат
176 1 1 Ахылбекова Дамида
183 1 1 Терликбаева Айгуль
299 1 1 Устембетова Калия
308 1 1 Караева Силаматхан
456 1 1 Садыбеков Даурен
501 1 1 Исмаилова Жамиля
760 1 1 Тамабаева Дина
1391 1 1 Калдыбекова Мария Кураковна
1392 1391 2 Закирова Бибигуль Саниязовна
1440 1391 2 Османова Зарипа Мамашовна
1393 1392 3 Жумабекова Гульмира Халилуллаевна
1438 1392 3 Альтенов Асхат Маратович
1442 1392 3 Мирзахмедова Айгул Досановна
1443 1392 3 Амирбекова Улпан Жаршаевна

все-таки не по порядку, сначала 1 уровень, затем 2-й. Да есть методы для сортировки по определнным значениям, например, по ФИО:
   WITH DistrCTE (DisID, ParID, Num, Lev, StatID, AppDate, Fio, Sort) AS
   (
      SELECT DisID, ParID, Num, Lev, StatID, AppDate, Fio,
          CONVERT(VARCHAR(MAX), Fam+' '+Imy) FROM Distrib WHERE ParID = @iParID
      UNION ALL
      SELECT d.DisID, d.ParID, d.Num, d.Lev, d.StatID, d.AppDate, d.Fio,
          CONVERT(VARCHAR(MAX), RTRIM(Sort)+'|'+d.Fam+' '+d.Imy) FROM Distrib d
          INNER JOIN DistrCTE c ON (d.ParID=c.DisID)
   )
   SELECT DisID, ParID, Num, Lev, StatID, AppDate, Fio FROM DistrCTE ORDER BY Sort
Но это тоже неверно, т.к. получится сортировка альфавитная


В Firebird, Oracle данные возвращаются последовательно с ветвями. Жаль что в любимом SQL Server-е все это как-то не так работает!? Может быть я ошибаюсь, есть другие методы? Что скажете...
4 дек 09, 10:10    [8018139]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Kipchak2
Теперь обратите внимание на следующий запрос на SQL 2005
  with DTree (disid, parid, lev, fio) as
    (select disid, parid, lev, fio from Distrib where parid = 0
     union all
     select d.disid, d.parid, d.lev, d.fio from Distrib d
       inner join DTree t on (d.ParID = t.DisID)
     )
    select disid, parid, lev, fio from DTree
все-таки не по порядку, сначала 1 уровень, затем 2-й.
......................
Что скажете...
Скажу, что не вижу ORDER BY в данном запросе.
Поэтому претензии непонятны.
4 дек 09, 10:15    [8018166]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Если для каждого узла дерева вычислять путь до корня,
то сортировку, о которой говорится, будет очень просто задать.
4 дек 09, 10:18    [8018188]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
Kipchak2
Member

Откуда: Казахстан, г. Алматы
Сообщений: 12
iap
Если для каждого узла дерева вычислять путь до корня,
то сортировку, о которой говорится, будет очень просто задать.


можете более подробно описать...

Спасибо!
4 дек 09, 10:23    [8018217]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Kipchak2
В Firebird, Oracle данные возвращаются последовательно с ветвями
И как выглядит запрос для Oracle ?
Особенно интересует, конечно, как Вы написали ORDER BY в запросе для Oracle...
4 дек 09, 10:30    [8018269]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
aleks2
Guest
Kipchak2
iap
Если для каждого узла дерева вычислять путь до корня,
то сортировку, о которой говорится, будет очень просто задать.


можете более подробно описать...

Спасибо!


with DTree (disid, parid, lev, fio, path_) as
    (select disid, parid, lev, fio, cast(disid as varbinary(8000)) path_ from Distrib where parid = 0
     union all
     select d.disid, d.parid, d.lev, d.fio, t.path_+cast(d.disid as varbinary(8)) path_ from Distrib d
       inner join DTree t on (d.ParID = t.DisID)
     )

    select disid, parid, lev, fio from DTree
    order by path_
4 дек 09, 10:43    [8018388]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
with DTree(path, disid, parid, lev, fio) as
(
 select CAST(STR(disid,11) AS VARCHAR(MAX)), disid, parid, lev, fio from Distrib where parid = 0
 union all
 select CAST(t.path+STR(d.disid,11) AS VARCHAR(MAX)), d.disid, d.parid, d.lev, d.fio from Distrib d
 join DTree t on d.ParID=t.DisID
)
select disid, parid, lev, fio
from DTree
order by path;
Так не работает?
Не проверял.
4 дек 09, 10:47    [8018411]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
Kipchak2
Member

Откуда: Казахстан, г. Алматы
Сообщений: 12
Паганель
Kipchak2
В Firebird, Oracle данные возвращаются последовательно с ветвями
И как выглядит запрос для Oracle ?
Особенно интересует, конечно, как Вы написали ORDER BY в запросе для Oracle...


   SELECT DisID, ParID, Lev, Fio FROM Distrib CONNECT BY PRIOR DisID = ParID

без применение ORDER BY данные сортируются по ветвям...
4 дек 09, 11:17    [8018569]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Kipchak2
без применение ORDER BY данные сортируются по ветвям...
То есть Вы серверу не сказали, как Вы хотите, чтобы он данные отсортировал,
но он Ваши мысли прочел, и сам понял как надо сортировать?
Странно, со мной никогда такого не случалось...

А результат можете показать?
4 дек 09, 11:21    [8018603]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
Kipchak2
Member

Откуда: Казахстан, г. Алматы
Сообщений: 12
Паганель
Kipchak2
без применение ORDER BY данные сортируются по ветвям...
То есть Вы серверу не сказали, как Вы хотите, чтобы он данные отсортировал,
но он Ваши мысли прочел, и сам понял как надо сортировать?
Странно, со мной никогда такого не случалось...

А результат можете показать?


я понимаю Вашу удвилению... И не ИСКЛЮЧАЮ предложение ORDER BY в запросе. Еще раз обратите внимание, ниже данные


DISID PARID LV FIO

1 0 0 Êîìïàíèÿ "ÔÈÒÎ Ãàóhàð"
564 1 1 Êîïæàñàðîâ Íóðëàí Êóäàéáåðãåíîâè÷
565 564 2 Ñàéëûáàåâà Íàãèìà Æàíàáàåâíà
566 564 2 Áàëàõîæàåâà Íàçèðà Àáéëàåâíà
567 564 2 Òèëåóáàåâà Çåáåðêóëü
568 567 3 Àëèáàåâà Àëòèíêóëü Íàæìàíîâíà
581 568 4 Áàéìàõàíîâà Ìàéðà Ñåðèêîâíà
569 567 3 Òîëåíîâà Àéíóð Àóåñõàíîâíà
583 569 4 Êóëüæàíîâà Êàëäèêóëü Äæàïïàðîâíà
2 657 583 5 Ìóðàòáàåâà Êóëàèì Àáèåâíà
2 658 2 657 6 Ìàìóíøèêîâ Òóãóíøèê
2 659 2 657 6 Ìóðàòáàåâà Ôàðèäà Òàëãàòîâíà
2 117 569 4 Æóçåíîâà Ïåðíàèì Áåêñóëòàíîâíà
2 212 569 4 Òîëåíîâà Ñàóëå Àóåñõàíîâíà
3 714 2 212 5 Åñåíêóëîâà Àéçàäà Øàéçàíäàåâíà

во-первых рекурсивный запрос возвращает данные в порядке следования ветвь. Сначала первый элемент 1-го уровня, затем данные вытаскиваются по ветвям, например:
DisID=564 - 1-уровень, затем если есть вложения, то его дети последовательно. После перечисления всех уровни DisID=546, начнется следующий элемент первого уровня DisID=NNN. Также сортировка по ID не даст требуемого результата, т.к. формирование ID записей не подчиняется иерархической структуре, т.е. например, DisID=2001 может находится на высшей ступени, чем DisID=655
4 дек 09, 11:56    [8018862]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Kipchak2
затем если есть вложения, то его дети последовательно
Извините, но Вы второй раз выкладываете данные в какой-то непонятной кодировке,
и я просто не могу увидеть - в какой именно последовательности идут "его дети последовательно"
Пробовал смотреть и под FireFox и под IE - все равно не вижу
4 дек 09, 12:00    [8018907]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
Kipchak2
Member

Откуда: Казахстан, г. Алматы
Сообщений: 12
Паганель
Kipchak2
затем если есть вложения, то его дети последовательно
Извините, но Вы второй раз выкладываете данные в какой-то непонятной кодировке,
и я просто не могу увидеть - в какой именно последовательности идут "его дети последовательно"
Пробовал смотреть и под FireFox и под IE - все равно не вижу


Это у меня с IBEpert копируются. Но здесь ФИО не важно, лучше обратите внимание на ID-шники DisID, ParID и Lv (уровни)...
4 дек 09, 12:12    [8019018]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Kipchak2
Но здесь ФИО не важно
Как это?
Если будет у Вас в результате дерево таким:
Компания Табигат
|- Есмахов  Нурлан Маликайдарович
|- Шораева Патима
|- Ким Клара Петровна
разве это будет нормально?
(мне, например, как пользователю, такой отчет было бы читать очень трудно)

Рекомендую Вам спросить у того, кто Вам задачу поставил, может дерево должно быть таким:
Компания Табигат
|- Есмахов  Нурлан Маликайдарович
|- Ким Клара Петровна
|- Шораева Патима
?
4 дек 09, 12:20    [8019082]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
Kipchak2
Member

Откуда: Казахстан, г. Алматы
Сообщений: 12
Паганель, вижу я не смог правильно изложить свой вопрос. То что Вы привели пример, как раз таки для меня был неверным результатом, это результат SQL CTE предложения -
with DTree (disid, parid, lev, fio) as
    (select disid, parid, lev, fio from Distrib where parid = 0
     union all
     select d.disid, d.parid, d.lev, d.fio from Distrib d
       inner join DTree t on (d.ParID = t.DisID)
     )
    select disid, parid, lev, fio from DTree

А теперь обратите внимание на следующий запрос в SQL 2005
SELECT d.DisID, d.ParID, d.Lev, d.Fio, s.Lft, s.Rgt FROM Distrib d
   INNER JOIN Stack s ON (d.DisID=s.DisID)
   ORDER BY s.Lft, d.Lev, s.Rgt

Но это метод Joe Celko и данные возвращаются иеархически, т.е. правильно:


DisID ParID Lev Fio Lft Rgt
1 0 0 Компания Табигат 1 4772
72 1 1 Есмахов Нурлан Маликайдарович 2 3969
74 72 2 Жайшибеков Жуман 3 8
427 74 3 Абитаева Алтынкуль 4 5
2508 74 3 Нурбекова Назира Ормахановна 6 7
75 72 2 Дуйсебаева Лайла 9 10
76 72 2 Майсунова Рахила 11 12
77 72 2 Байтиков Айдар 13 14
78 72 2 Тулебаева Гульмира 15 16
79 72 2 Огай Аделина 17 22
2540 79 3 Хурттуева Раиса Сергеевна 18 19
2541 79 3 Попова Ольга Викторовна 20 21
80 72 2 Рубцова Галина Павловна 23 24
81 72 2 Султанбекова Роза 25 26
83 72 2 Бидайбекова Улбосын 27 3020
101 83 3 Бидайбекова Назима 28 31
165 101 4 Бидайбеова Мейрамкуль 29 30
4 дек 09, 12:44    [8019287]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Про иерархичность я понял
Я не о ней спрашивал
Я спрашивал про сортировку внутри одного уровня иерархии

Другими словами, Вы говорите, что "дети" должны идти после своих "родителей"
Я же говорю про порядок, в котором должны выводиться "братья"

Например:
Вы считаете правильным такой порядок:
...
76	72	2	Майсунова  Рахила
77	72	2	Байтиков Айдар
78	72	2	Тулебаева Гульмира
...
Я же рекомендую Вам поинтересоваться, может нужен такой порядок:
...
77	72	2	Байтиков Айдар
76	72	2	Майсунова  Рахила
78	72	2	Тулебаева Гульмира
...
То есть сортировка "братьев" не по ID а по имени ?
4 дек 09, 12:55    [8019399]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
Kipchak2
Member

Откуда: Казахстан, г. Алматы
Сообщений: 12
Если сортировка по ФИО:

WITH DistrCTE (DisID, ParID, Lev, Fio, Sort) AS
   (
      SELECT DisID, ParID, Lev, Fio,
          CONVERT(VARCHAR(MAX), Fam+' '+Imy) FROM Distrib WHERE ParID = 0
      UNION ALL
      SELECT d.DisID, d.ParID, d.Lev, d.Fio,
          CONVERT(VARCHAR(MAX), RTRIM(Sort)+'|'+d.Fam+' '+d.Imy) FROM Distrib d
          INNER JOIN DistrCTE c ON (d.ParID=c.DisID)
   )
   SELECT DisID, ParID, Lev, Fio FROM DistrCTE ORDER BY Sort

обратите внимание, результаты немного по другому:


DisID ParID Lev Fio
1 0 0 Компания Табигат
176 1 1 Ахылбекова Дамида
177 176 2 Жумагулова Жаннат
72 1 1 Есмахов Нурлан Маликайдарович
77 72 2 Байтиков Айдар
1480 72 2 Белякова Любовь Андреевна
83 72 2 Бидайбекова Улбосын
115 83 3 Абдимомынова Гаухар
152 83 3 Абдулаев Нурсултан
126 83 3 Аблаева Арфина
151 83 3 Айтымбетова Райхан
1936 151 4 Азимбекова Айгуль
514 151 4 Жулаева Мария
513 151 4 Жунисова Дарикул
556 513 5 Махашева Гульнара
495 151 4 Жусипахметова Гульмира
583 495 5 Бисенов Молдагали
1931 495 5 Иманбекова Сагынкуль
494 151 4 Зайтбекова Лаззат
572 494 5 Айнакулова Кыздаркуль
1913 572 6 Ракишпаева Сейкуль

меня удивляют и интересуют запросы на Firebird, Oracle, почти без применения ORDER BY данные возвращаются иеархически, на подобие методом Joe Celko... В любом случае последний запрос с виртуальным полем SORT работает дольше чем в Oracle или Firebird...
4 дек 09, 13:14    [8019559]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Kipchak2
Если сортировка по ФИО
Не понял
Вы переспросили у руководства, и выяснили, что сортировка "братьев" должна быть по ФИО?
Или не переспросили и не выяснили?
4 дек 09, 13:20    [8019606]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> меня удивляют и интересуют запросы на Firebird, Oracle, почти без
> применения ORDER BY данные возвращаются иеархически

как это - _почти_ без применения?
и что - где-то гарантируется возврат правильно отсортированных данных
без order by? потому как, если нет, - это разговор ни о чем.

Posted via ActualForum NNTP Server 1.4

4 дек 09, 13:23    [8019640]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
Kipchak2
Member

Откуда: Казахстан, г. Алматы
Сообщений: 12
daw

> меня удивляют и интересуют запросы на Firebird, Oracle, почти без
> применения ORDER BY данные возвращаются иеархически

как это - _почти_ без применения?
и что - где-то гарантируется возврат правильно отсортированных данных
без order by? потому как, если нет, - это разговор ни о чем.


потому что рекурсивный запрос WITH CTE (...) в Firebird 2.1 или SELECT * FROM Table CONNECT BY PRIOR id=parentid гарантированно возвращают данные иеархически родитель1-дети-внуки-правнуки и т.д., затем следующие данные родитель2-дети-внуки-правнуки и т.д.
4 дек 09, 13:40    [8019778]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> потому что рекурсивный запрос WITH CTE (...) в Firebird 2.1 или SELECT *
> FROM Table CONNECT BY PRIOR id=parentid гарантированно возвращают данные
> иеархически родитель1-дети-внуки-правнуки и т.д., затем следующие данные
> родитель2-дети-внуки-правнуки и т.д.

и ссылочка на документацию есть, где это сказано?

Posted via ActualForum NNTP Server 1.4

4 дек 09, 13:42    [8019801]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
Glory
Member

Откуда:
Сообщений: 104760
Kipchak2
daw

> меня удивляют и интересуют запросы на Firebird, Oracle, почти без
> применения ORDER BY данные возвращаются иеархически

как это - _почти_ без применения?
и что - где-то гарантируется возврат правильно отсортированных данных
без order by? потому как, если нет, - это разговор ни о чем.


потому что рекурсивный запрос WITH CTE (...) в Firebird 2.1 или SELECT * FROM Table CONNECT BY PRIOR id=parentid гарантированно возвращают данные иеархически родитель1-дети-внуки-правнуки и т.д., затем следующие данные родитель2-дети-внуки-правнуки и т.д.

Это прямо в их документации написано ??
Просто в документации MSSQL написано, что гарантированное упорядочивание дает только использование ORDER BY в самом внешнем запорсе
Вам это может не нравиться, но использовать ORDER BY все равно придется
4 дек 09, 13:42    [8019803]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Kipchak2
daw

> меня удивляют и интересуют запросы на Firebird, Oracle, почти без
> применения ORDER BY данные возвращаются иеархически

как это - _почти_ без применения?
и что - где-то гарантируется возврат правильно отсортированных данных
без order by? потому как, если нет, - это разговор ни о чем.


потому что рекурсивный запрос WITH CTE (...) в Firebird 2.1 или SELECT * FROM Table CONNECT BY PRIOR id=parentid гарантированно возвращают данные иеархически родитель1-дети-внуки-правнуки и т.д., затем следующие данные родитель2-дети-внуки-правнуки и т.д.
Ссылки на гарантии дадите? Или цитату хотя бы?
Если нет, то, несмотря на кажущуюся упорядоченность, следует считать,
что результатирующие записи следуют в произвольном порядке. IMHO
4 дек 09, 13:44    [8019827]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Вообще, SELECT должен возвращать множество.
А множество не обладает свойством упорядоченности.
4 дек 09, 13:47    [8019858]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
Kipchak2
Member

Откуда: Казахстан, г. Алматы
Сообщений: 12
WITH DistrCTE (DisID, ParID, Lev, Fio, Sort) AS
   (
      SELECT DisID, ParID, Lev, Fio,
          CONVERT(VARCHAR(MAX), Fam+' '+Imy) FROM Distrib WHERE ParID = 0
      UNION ALL
      SELECT d.DisID, d.ParID, d.Lev, d.Fio,
          CONVERT(VARCHAR(MAX), RTRIM(Sort)+'|'+d.Fam+' '+d.Imy) FROM Distrib d
          INNER JOIN DistrCTE c ON (d.ParID=c.DisID)
   )
   SELECT DisID, ParID, Lev, Fio FROM DistrCTE ORDER BY Sort

Извините, народ, я же не пишу, что нельзя использовать ORDER BY.
А выше приведенный пример с сортировкой считаю выход из положения. Представьте себе, в таблице дистрибьюторов, свыше 100000 записей и программно рассчитать по каждому узлу объем продажи, начисление бонуса, когда статус (ставка бонуса) каждого дистрибьютора зависит от его ветвь, от количества, также зависит от уровня расположения в сети. Получается, по каждому узлу подобный запрос в цикле…
4 дек 09, 15:19    [8020789]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивные запросы в SQL:Server 2005 и сортировки  [new]
Kipchak2
Member

Откуда: Казахстан, г. Алматы
Сообщений: 12
Картинка с другого сайта.

мне кажется в Firebird-e или в Oracle рекурсивный запрос выполняется по такому принципу, поэтому по умолчанию данные выводятся иеархически, это мое предположение...
4 дек 09, 15:43    [8020996]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить