我有一个问题,我试图解决从层次结构中最低的孩子到提供的最高级别(由ID标注)的总结。本质上,我试图将一个大容器的ID输入到一个递归函数中,该函数计算较低节点的值,然后将它们追溯到该特定ID。
我在递归CTE中处理层次结构,并且能够达到以下所示的点:
ALTER FUNCTION [dbo].[tree_from_id](@myid INT) RETURNS TABLE AS
RETURN (
WITH tree_cte (id, ID_PARENT, VOLUME, nlevel, treepath)
as
(SELECT i.id, i.id_parent, i.VOLUME, nlevel = 1, cast(i.id as nvarchar(255)) as treepath
FROM item i
WHERE id = @myid
UNION ALL
SELECT i.ID, i.ID_PARENT, i.VOLUME, tc.nlevel + 1, cast(tc.treepath+' <- ' + cast(i.id as nvarchar(255))as nvarchar(255)) as treepath
FROM tree_cte tc
INNER JOIN
item i ON i.id_parent = tc.id
SELECT * FROM tree_cte
)
GO
这使我能够获得每个项目的级别并显示它们的层次结构,通过调用函数来完成:
SELECT * FROM tree_from_id(215548)
其中215548是特定物品ID。
我正在寻找为项目量实现类似的东西,但我不确定如何从较低的孩子聚集到他们的父母。我尝试了与上面所示相同的方法,但可以理解的是,它从父母开始并向下添加到孩子们身上。
此外,还有一种方法可以添加定义是否添加该项目的音量/为其音量使用不同值的案例吗?例如 - 如果项目没有子项,请为卷使用不同的维度?
谢谢!我想了解更多关于SQL的信息,发现这对我来说是一个特别棘手的问题。
答案 0 :(得分:0)
我不确定你想要累积的音量,但是你不能在你去的时候总结它吗?
部分摘要....
UNION ALL
SELECT i.ID, i.ID_PARENT, i.VOLUME+tc.VOLUME, tc.nlevel + 1, cast(tc.treepath+' <- ' + cast(i.id as nvarchar(255))as nvarchar(255)) as treepath
FROM tree_cte tc