Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 31
1

Обработка (разузловка) дерева и IF/ELSE

30.11.2017, 10:37. Показов 1470. Ответов 2

Author24 — интернет-сервис помощи студентам
Здравствуйте! Не имею больших знаний и опыта в работе с базами данных. Требуется выполнить разузловку дерева. Выполняю цикл с запросами и получаю таблицу @t1 следующего характера

id parent child Уровень вхождения

При этом в отчете получается так, что сначала идет весь первый уровень, затем весь второй, третий и так далее. А хотел получить таким образом отчет, чтобы сначала шёл объект первого уровня, далее вся его разузловка, затем второй объект первого уровня и т.д.

Но никак не соображу каким образом в select можно вписать именно такой порядок выборки. Или это можно каким либо образом через order by?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.11.2017, 10:37
Ответы с готовыми решениями:

Многопоточная обработка дерева
Есть следующий класс реализующий интерфейс Runnable: public class TreeHandler implements...

Обработка дерева значений
есть дерево значений --2 уровень 50 --2 уровень 50 ----4 уровень 100 ----4 уровень 100 ---3...

Обработка дерева категорий
Здравствуйте, есть таблица с категориями( ее структура на картинке ). Построить само дерево...

Создание и обработка сбалансированного дерева
Имеется программа: #include "stdafx.h" #include "windows.h" #include "stdio.h" #include...

2
1643 / 1144 / 171
Регистрация: 23.07.2010
Сообщений: 6,794
30.11.2017, 13:11 2
Цитата Сообщение от Крупнов Посмотреть сообщение
Выполняю цикл с запросами и получаю таблицу @t1 следующего характера
вот тут нужно пояснение. Какие циклы в SQL?
0
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 31
30.11.2017, 14:58  [ТС] 3
в цикле как раз и формирую вышеуказанную таблицу в виде линейного списка (сначала объекты первого уровня, затем второго и так далее). Если детальнее говорить, то ниже запрос на заполнение временной таблицы. Только там столбцов не четыре, а больше.


SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@level = 0
 
while @@rowcount > 0
 BEGIN
  SET @level = @level + 1
  SET @INDEX=''
  INSERT INTO @t1
    SELECT 
        
     r.id, r.idparent, r.idchild, v.type, v.product, r.minquantity, @level
     
     FROM @t1 qu
     INNER JOIN rvwRelationsAll r ON qu.level = @level-1 AND
     qu.idchild = r.idparent AND r.relationname = 'Состоит из ...'
     INNER JOIN rvwVersions v ON v.id=r.idchild
 END
затем уже из временной таблицы делаю выборку

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT concat(a.product, ' - ', c.value) AS 'Обозначение родителя (куда входит)', b.product AS 'Обозначение изделия', d.value AS 'Наименование', b.type AS 'Вид изделия', 
minquantity AS 'Количество', level AS 'Уровень вхождения' FROM @t1
LEFT JOIN rvwVersions a ON a.id = idparent
LEFT JOIN rvwVersions b ON b.id = idchild
LEFT JOIN rvwAttributes c ON c.idversion=idparent AND c.name='Наименование' 
LEFT JOIN rvwAttributes d ON d.idversion=idchild AND d.name='Наименование' 
WHERE (b.type='Сборочная единица') OR (b.type='Деталь') OR (b.type='Комплект')
ORDER BY level, 
a.product,
CASE b.type WHEN 'Сборочная единица' THEN 1
            WHEN 'Деталь' THEN 2
            WHEN 'Комплект' THEN 3 END,
b.product
Добавлено через 6 минут
получается такой результат
id Обозначение родителя Обозначение изделия Уровень вхождения
1 Стул ДН.055.001 Спинка ДН.056.001 0
2 Стул ДН.055.001 Сиденье ДН.057.001 0
3 Спинка ДН.056.001 Поперечина ДН.044.001 1
4 Сиденье ДН.057.001 поперечина ДН.044.002 1
5 Поперечина ДН.044.001 Уголок УГ.003.001 2

а хотелось бы видеть такой
id Обозначение родителя Обозначение изделия Уровень вхождения
1 Стул ДН.055.001 Спинка ДН.056.001 0
2 Спинка ДН.056.001 Поперечина ДН.044.001 1
3 Поперечина ДН.044.001 Уголок УГ.003.001 2
4 Стул ДН.055.001 Сиденье ДН.057.001 0
5 Сиденье ДН.057.001 поперечина ДН.044.002 1
0
30.11.2017, 14:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2017, 14:58
Помогаю со студенческими работами здесь

Обработка бинарного дерева без рекурсии
Исходное: имеем ASP проект (классический VBScript без всяких .NET) базу (MSSQL), в которую...

Операции над бинарными деревьями: построение дерева, обход дерева, вставка и удаление элемента дерева
Пожалуйста кто сможет, помогите составить программу: Организация по трудоустройству населения...

Опросник. Создание дерева зависимостей в treeView, сохранение дерева в XML, построение дерева в treeView из XML
Всем доброго времени суток. Тема является продолжением вот этой темы. Создаю 2ю, так как там...

Запись бинарного дерева в файл и восстановление из него этого дерева
Задача такая: есть бинарное дерево. Каждый элемент дерева содержит 3 указателя - 1 указатель на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru