我有一个产品和组件的清单,它们有不同的价格。下面是一个简单的例子。
drop table if exists #group_test
Create Table #group_test
(
ID Integer
, Hierarchy Nvarchar(200)
, Price Integer
)
Insert Into #group_test
values
(1,'001',10)
, (2,'001.001',20)
, (3,'001.002',5)
, (4,'001.002.001',3)
, (5,'001.002.002',2)
, (6,'001.002.003',4)
, (7,'001.003',6)
<表类>ID 层次价格 tbody><<tr>1 001 10 2001.001 20 3 001.002 5 4001.002.001 3 5001.002.002 2 6001.002.003 4 7001.003 6 表类>
我很抱歉,这个问题的答案将会更简单,因为你有数据设置的方式。
顺便说一下,我假设所有层次结构中的级别都只能从000到999 -没有像001.11111.002这样的层次结构-如果是这样的话,它会变得有点复杂。
然而,因为每个关卡都有自己独特的价格,所以你可以简单地将所有子关卡的价格相加(包括子关卡的子关卡等),从而得到总价格。
见下面和这个数据库<>小提琴的示例代码
SELECT out_tb.ID,
out_tb.Hierarchy,
out_tb.Price,
SUM(in_tb.Price) AS Total_Price
FROM #group_test AS out_tb
INNER JOIN #group_test AS in_tb ON in_tb.hierarchy LIKE out_tb.hierarchy + N'%'
GROUP BY out_tb.ID,
out_tb.Hierarchy,
out_tb.Price;