SQL 父子级关系找出最底层的数量和个层级数量验证

这篇博客介绍了一个SQL查询示例,用于根据输入的lotid递归查找所有层级的数据,并计算每个层级及其父层级的数量。查询首先通过CTE(公共表表达式)构建递归关系,然后通过LEFT JOIN找出最底层的记录,最后通过分组计算每个父层级的子级数量和父级自身数量的对比。
摘要由CSDN通过智能技术生成

表结构即

数据里有lotid和ParentLotId,和level

DECLARE @LotNM NVARCHAR(50)='FJV002122052';--输入需要的条码
WITH CTE_TEMP   
as(
select Qty,Level,LotId,ParentLotId,ParentLotNM FROM lot where LotNM=@LotNM
union ALL
SELECT a.qty,a.Level,a.LotId,a.ParentLotId,a.ParentLotNM  FROM lot a
INNER JOIN CTE_TEMP b ON a.ParentLotId = b.LotId 
)  --递归查出所有的层级关系
select SUM(t1.Qty)
from CTE_TEMP t1
left join CTE_TEMP t2 on t1.LotId=t2.ParentLotId  --通过找到lotid不存在是ParentLotId的,即为最后一层的数量
where t2.LotId is NULL

--通过分组找到个个子级的数量和父级的数量做对比
SELECT ParentLotNM,SUM(qty)'该父级的子级数量和',(SELECT qty FROM lot a WHERE a.LotNM=ISNULL(b.ParentLotNM,@LotNM))'该父级数量' FROM CTE_TEMP b GROUP BY b.ParentLotNM

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值