Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Задача с деревьями
|
|||
|---|---|---|---|
|
#18+
Есть такая таблица с данными create table #tree(id int identity, parent int , n varchar(33), le int, ri int) go set nocount on insert #tree select 0, 'K',1,16 insert #tree select 1, '1',2,13 insert #tree select 2, '11',3,4 insert #tree select 2, '12',5,12 insert #tree select 4, '121',6,7 insert #tree select 4, '122',8,9 insert #tree select 4, '123',10,11 insert #tree select 2, '2',14,15 Такой запрос select replicate('-',count(*))+t1.n from #tree t1, #tree t2 where t2.le<t1.le and t2.ri>t1.ri group by t1.n, t1.le order by t1.le выдаст мне(и вам): -1 --11 --12 ---121 ---122 ---123 -2 (минусик использую из-за того что пробел тут не виден будет) мне же надо получить дерево в виде: -1 1 --11 1 --11 2 --12 1 ---121 1 ---121 2 ---122 1 ---122 2 ---123 1 ---123 2 --12 2 -1 2 -2 1 -2 2 Т.е. что бы каждый элемент появился бы два раза: в начале ветви(1) и по её завершении(2). Второй день не могу сообразить, хотя есть такое чуйство что это можно. Заранее благодарен С приветом Сергей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2001, 13:20 |
|
||
|
Задача с деревьями
|
|||
|---|---|---|---|
|
#18+
А так не устроит? select replicate('-',count(*))+t1.n, substring(t1.n, case len(t1.n) when 1 then 1 else len(t1.n) end, 1) from #tree t1, #tree t2 where t2.le<t1.le and t2.ri>t1.ri group by t1.n, t1.le order by t1.le Сорри не до конца понял задачу этот не подойдет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2001, 13:37 |
|
||
|
Задача с деревьями
|
|||
|---|---|---|---|
|
#18+
Увы, отвечаю сам себе(как тут не поверить в собственную гениальность ) Решение оказалось на редкость простое и красивое select replicate('-',count(*))+t1.n+ ' '+convert(varchar,i) from #tree t1, #tree t2 ,(select 1 i union select 2) as n where t2.le<t1.le and t2.ri>t1.ri group by t1.n,t1.ri, t1.le,i order by t1.le*(2-i)+t1.ri*(i-1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2001, 15:47 |
|
||
|
Задача с деревьями
|
|||
|---|---|---|---|
|
#18+
Ну что можно сказать? Да ничего!! БЛЕСК!! Спасибо, кстати, что Вы ответили, я уже всю голову поломал пытаясь решить эту задачку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2001, 16:10 |
|
||
|
Задача с деревьями
|
|||
|---|---|---|---|
|
#18+
Просто из любопытства... А для чего понадобилось решать такую задачу? Я тоже ковыряюсь с деревьями и вообще графами, но эта задача меня озадачила. Может, я ее просто не понял... Вообще, в классике по B-деревьям наиболее часто возникают задачи: 1. Определить, находится ли узел А в поддереве, вершиной которой является узел Б. 2. Выборка всех родителей узла А в порядке их уровня в дереве. 3. Выборка всех узлов, находящихся в поддереве, вершиной которой является узел А. 4. Выборка всех узлов, прямым родителем которых является узел А. Для B-деревьев специфической структуры: 5. Определение наиболее близкого общего родителя для узлов А и Б. 6. Задача балансировки дерева с целью уменьшения его максимальной глубины (обычно используется по специфическим структурам для ускорения поиска по B-дереву). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2001, 21:25 |
|
||
|
Задача с деревьями
|
|||
|---|---|---|---|
|
#18+
2 Garya Есть некий отчет примерно такой формы: отчет Х __Раздел 1 ____подраздел 1.1 ______подподраздел 1.1.1 ______подподраздел 1.1.2 ____итого по подразделу 1.1 __Итого по разделу 1 итого по отчету Х Т.е. сначала идет заголовок некого раздела, внутри его подразделы, а потом общая сумма по разделу. Или в этих случаях надо как-то по другому делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2001, 09:40 |
|
||
|
Задача с деревьями
|
|||
|---|---|---|---|
|
#18+
Я уже полагал, что сам допер... Тут знакомый подсказал, что ты, наверное, пытаешься слепить динамический HTML. И поскольку в нем теги обозначаются метками начала и конца тега, приходится повторять одну метку в начале и в конце. Оказалось, догадка была ошибочной... А по отчетам, IMHO, можно и без подобных выкрутасов обойтись. Правда, специфика зависит от конкретного генератора отчетов. Я использовал Crisatl Reports и конструктор отчетов MS Access (кстати, насколько мне известно, механизм отчетов для MS Access был разработан как раз Cristal). И в первом, и во втором случае не требуется дублирование записей в источнике. При формировании заголовка раздела не происходит перемещения на следующую запись в наборе данных. Поэтому одна и та же запись используется как в разделе заголовка, так и в области данных. Пока выводятся строки в области данных, подсчитываются промежуточные итоги для соответствующих разделов. Но все это внутренняя кухня, над которой даже не приходится задумываться. Если ты поля итогов разместишь не ПОД а НАД разделом данных, то отчет автоматически станет двухпроходным. Но работать будет и будет выдавать правильные результаты (только потормознеет). Сообщи, какой используешь генератор отчетов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2001, 20:07 |
|
||
|
Задача с деревьями
|
|||
|---|---|---|---|
|
#18+
Отчет в виде динамического HTML Если использовать стандартные отчеты с группировками - то это и так понятно. Правда не знаю можно ли это будет делать если неизвестен уровень вложенности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2001, 10:04 |
|
||
|
Задача с деревьями
|
|||
|---|---|---|---|
|
#18+
В Access выкрутиться можно. Для этого компоновка отчета тоже делается динамической. Сначала конструируется отчет, потом открывается. Но возни для такого варианта раз в несколько больше, чем для статического отчета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2001, 11:42 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32005250&tid=1826800]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 378ms |

| 0 / 0 |
