我的表有3列 - OriginalDoc,ChildDoc和Fee。对于每个家长,根据他们的孩子或大孩子的数量 - 家长将被收取费用。
每份Child Doc收费为0.40美元
从以下示例中,
DocId : AB12456 has one Child Doc and so Fee is $0.40
Doc Id : CY12345 has 7 Children/GrandChildren Doc and so Fee is $2.80
NX23410和NY23422等文档无法向其收取费用。因为他们的父文件#CY12345是针对所有孩子/大孩子的。
DECLARE @Sample TABLE ( OriginalDoc VARCHAR(255), ChildDoc VARCHAR(255), Fee MONEY );
INSERT INTO @Sample
VALUES ( 'AB12456', 'NX12450', NULL ),
( 'CY12345', 'NX23410', NULL ),
( 'CY12345', 'NX23421', NULL ),
( 'CY12345', 'NX23432', NULL ),
( 'NX23410', 'NY23411', NULL ),
( 'NX23410', 'NY23422', NULL ),
( 'NY23422', 'NZ23411', NULL ),
( 'NY23422', 'NZ23422',NULL);
如何在没有硬编码任何文档ID的情况下编写层次结构SQL查询?我们将输入参数作为DocId传递。
答案 0 :(得分:3)
以下是如何执行此操作的方法:
with cte as(select *, OriginalDoc as Parent from Sample s1
where not exists(select * from Sample s2 where s2.ChildDoc = s1.OriginalDoc)
union all
select s.*, c.Parent from cte c
join Sample s on c.ChildDoc = s.OriginalDoc
)
select Parent, count(*)*0.4 as Fee from cte
group by Parent