Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Посчитать требуещее количество деталей для сборки  [new]
VicN
Member

Откуда:
Сообщений: 28
Здравствуйте.

Дано древовидная таблица построенная по методу рекурсии. Поля таблицы такие:
ID ParentID Name Num

где 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]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать требуещее количество деталей для сборки  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать требуещее количество деталей для сборки  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
смотри пример D
23 май 17, 14:34    [20504418]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать требуещее количество деталей для сборки  [new]
VicN
Member

Откуда:
Сообщений: 28
Дедушка,

Смотрел, не подходит. Точнее не подсчитывает общее количество требуемых в сборку/готовую продукцию
23 май 17, 14:44    [20504452]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать требуещее количество деталей для сборки  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
VicN,

сверху вниз считайте количество, примера достаточно, если нет - рисуйте репо
23 май 17, 14:46    [20504459]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать требуещее количество деталей для сборки  [new]
VicN
Member

Откуда:
Сообщений: 28
TaPaK,

Наверное глупый вопрос, но что означает это фраза?
автор
рисуйте репо
23 май 17, 15:07    [20504558]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать требуещее количество деталей для сборки  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
VicN
TaPaK,

Наверное глупый вопрос, но что означает это фраза?
автор
рисуйте репо
В общем, не репо, а РЕПРО.
Скрипт создания БД, объектов БД, заполнения их тестовыми данными и скрипт с запросами,
приводящий к описываемым результатам (ошибочным?).
Всё это точно описывает ситуацию, которую легко воспроизвести на сервере любого, кто захочет помочь.
И версию сервера написать не забудьте (результат PRINT @@VERSION на вашем сервере).
Ясно, что достаточны лишь объекты, относящиеся к проблеме.
23 май 17, 15:24    [20504637]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать требуещее количество деталей для сборки  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Посчитать требуещее количество деталей для сборки  [new]
VicN
Member

Откуда:
Сообщений: 28
TaPaK,

Спасибо за пример, разобрался.
24 май 17, 13:46    [20507879]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить