在对字符串的一部分进行分组时避免子查询



我有一个产品和组件的清单,它们有不同的价格。下面是一个简单的例子。

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>1001102001.001203001.00254001.002.00135001.002.00226001.002.00347001.0036

我很抱歉,这个问题的答案将会更简单,因为你有数据设置的方式。

顺便说一下,我假设所有层次结构中的级别都只能从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;

最新更新