У меня есть эта таблица:Выполнение рекурсивных SQL Query (SQL Server 2005)
ID_Articulo ID_Componente Tipo Cantidad
1 5 2 1.5
5 3 1 3
1 6 1 6
2 3 1 3.5
6 8 2 4.2
8 9 1 2
Мне нужно найти SUM поля Cantidad для данного ID_Articulo и типо = 1. Например, для ID_Articulo = 1 должно быть 1.5 * 3 + 6 + 6 * 4.2 * 2 = 60.9.
Число до уровня (глубокое) является переменной для каждого ID_Articulo.
Может ли это быть с SQL-запросом? Моя база данных SQL Server 2005.
Доп Информация
Поля ID_Articulo И ID_Compenente связаны с одной и той же таблицы ARTICULOS. Вот почему данные являются рекурсивными. Таким образом, для данного примера у меня есть:
ReC#1 is not Tipo=1, but relates ID 1 with ID 5
ReC#2 relates ID 5 with ID 3 and Tipo=1 So, I have 1.5 (of ReC#1) * 3
ReC#3 relates ID 1 with ID 6 and Tipo=1, so i have 6
ReC#4 is from another ID
ReC#5 relates ID 6 with ID 8 but Tipo!=1 so i don't sum
ReC#6 relates ID 8 and ID 9 and Tipo=1, so I have 6 * 4.2 * 2
Окончательное решение
Это окончательный код (Некоторые имена полей различны):
;WITH CTE AS (
SELECT b.ID_Articulo, ID_Componente, Tipo, Cantidad,
CAST(Cantidad AS DECIMAL(6,2)) AS partialSum
FROM Arbol b inner join articulos a on a.ID_Articulo=b.ID_Componente
WHERE b.ID_Articulo = 2716
UNION ALL
SELECT t.ID_Articulo, t.ID_Componente, t.Tipo, t.Cantidad,
CAST(c.partialSum * t.Cantidad AS DECIMAL(6,2)) AS partialSum
FROM (SELECT b.ID_Articulo, ID_Componente, A.Tipo, Cantidad FROM Arbol b inner join articulos a on a.ID_Articulo=b.ID_Componente inner join Articulos a2 on a2.ID_Articulo=b.ID_Articulo where a2.Tipo<>'I') as t
INNER JOIN CTE AS c ON c.ID_Componente = t.ID_Articulo
)
SELECT SUM(partialSum)
FROM CTE
WHERE Tipo = 'I'
Спасибо @ Йоргос-betsos для окончательное решение
Я не вижу, как вы получите эту сумму для ID_Articulo = 1 и образец таблицы, которую вы предоставили. Я также не понимаю, почему это рекурсивно? – Paddy
Извините. Виноват. Я редактирую вопрос, чтобы дать больше информации. – ericpap
Да, почему 1.5 * 3 часть вашего уравнения? Единственный 1.5 находится в первой строке, где 'tipo' равно 2, поэтому в соответствии с описанием он не должен включаться. Ваш пример только делает ваш вопрос менее ясным. –