Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
VicN Member Откуда: Сообщений: 28 |
Здравствуйте. Дано древовидная таблица построенная по методу рекурсии. Поля таблицы такие:
где Num - это необходимое количество деталей для сборки сборочной единицы, в которую он входит. В виде дерева выглядит так: Готовый продукт 1шт -----Сборочная единица_1 2шт ----------Сборочная единица_3 1шт ---------------Деталь_1 20шт ---------------Деталь_2 10шт ----------Сборочная единица_4 2шт ---------------Деталь_3 5шт ---------------Деталь_4 1шт -----Сборочная единица_2 1шт ----------Деталь_5 5шт Нужно подсчитать количество Подскажите, пожалуйста, как можно реализовать подсчет необходимого количества деталей в требуемую сборочную единицу? Исходная таблица представляет собой |
|||||
23 май 17, 14:09 [20504333] Ответить | Цитировать Сообщить модератору |
VicN Member Откуда: Сообщений: 28 |
Извиняюсь, случайно нажал кнопку публикации, не закончив до конца сообщение. Продолжаю: Требуется найти количество деталей необходимых для сборки Готовой продукции или выбранной сборочной единицы. Пример, для Готовый продукции это должно выглядеть примерно так: Сборочная единица_1 2шт Сборочная единица_3 2шт Деталь_1 40шт Деталь_3 20шт Сборочная единица_ 4 4шт Деталь_3 20шт Деталь_4 4шт Сборочная единица_2 1 Деталь_5 10 Как можно вывести примерно такую информацию? |
23 май 17, 14:20 [20504369] Ответить | Цитировать Сообщить модератору |
Дедушка Member Откуда: Город трёх революций Сообщений: 5114 |
смотри пример D |
23 май 17, 14:34 [20504418] Ответить | Цитировать Сообщить модератору |
VicN Member Откуда: Сообщений: 28 |
Дедушка, Смотрел, не подходит. Точнее не подсчитывает общее количество требуемых в сборку/готовую продукцию |
23 май 17, 14:44 [20504452] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
VicN, сверху вниз считайте количество, примера достаточно, если нет - рисуйте репо |
23 май 17, 14:46 [20504459] Ответить | Цитировать Сообщить модератору |
VicN Member Откуда: Сообщений: 28 |
TaPaK, Наверное глупый вопрос, но что означает это фраза?
|
||
23 май 17, 15:07 [20504558] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
Скрипт создания БД, объектов БД, заполнения их тестовыми данными и скрипт с запросами, приводящий к описываемым результатам (ошибочным?). Всё это точно описывает ситуацию, которую легко воспроизвести на сервере любого, кто захочет помочь. И версию сервера написать не забудьте (результат PRINT @@VERSION на вашем сервере). Ясно, что достаточны лишь объекты, относящиеся к проблеме. |
||||
23 май 17, 15:24 [20504637] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
iap, точно :) DROP TABLE #C CREATE TABLE #C ( ID INT, ParentId INT NULL, Name VARCHAR(255), Cnt INT ) INSERT INTO #c(Id,ParentId,Name,Cnt) SELECT 1, NULL, 'Готовый продукт', 1 UNION ALL SELECT 2, 1, 'Сборочная единица_1', 2 UNION ALL SELECT 3, 2, 'Сборочная единица_3', 1 UNION ALL SELECT 4, 3, 'Деталь_1',20 UNION ALL SELECT 5, 3, 'Деталь_2', 10 UNION ALL SELECT 6, 2, 'Сборочная единица_4', 2 UNION ALL SELECT 7, 6, 'Деталь_3', 5 UNION ALL SELECT 8, 6, 'Деталь_4', 1 UNION ALL SELECT 9, 1, 'Сборочная единица_2', 1 UNION ALL SELECT 10, 9, 'Деталь_5', 5 ;WITH xxx AS ( SELECT Id, ParentId, Name, Cnt, [Level] = 0, [FullCnt] = Cnt FROM #c WHERE ParentId IS NULL UNION ALL SELECT a.Id, a.ParentId, a.Name, a.Cnt, [Level] = [Level] + 1, [FullCnt] = a.Cnt * b.[FullCnt] FROM #c a INNER JOIN xxx b ON a.ParentId = b.Id ) SELECT Name, Cnt FROM xxx ORDER BY Id |
23 май 17, 15:34 [20504676] Ответить | Цитировать Сообщить модератору |
VicN Member Откуда: Сообщений: 28 |
TaPaK, Спасибо за пример, разобрался. |
24 май 17, 13:46 [20507879] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |