当前位置: 代码迷 >> Sql Server >> 分组统计,该怎么处理
  详细解决方案

分组统计,该怎么处理

热度:18   发布时间:2016-04-24 10:04:32.0
分组统计

WITH CTE AS
(
  SELECT ID,FactoryID,ProjectSN,ProjectItem,PkgCode,ParentPkgCode,PkgType,PkgQty,cast(PkgCode as nvarchar(max)) as TE,cast(PkgCode as nvarchar(max)) as TreePath,
  0 as TreeLevel,ROW_NUMBER()over(order by getdate()) as OrderID
  FROM dbo.NCC_PackageMstr
  UNION ALL    
  SELECT PM.ID,PM.FactoryID,PM.ProjectSN,PM.ProjectItem,PM.PkgCode,PM.ParentPkgCode,PM.PkgType,PM.PkgQty+CTE.PkgQty,
  cast(replicate(' ',(CTE.TreeLevel+1)*6)+'|_'+PM.PkgCode as nvarchar(MAX)) as TE,
  cast(CTE.TreePath+'::'+PM.PkgCode as nvarchar(MAX)) as TreePath,CTE.TreeLevel+1 as TreeLevel,
  CTE.OrderID*100+ROW_NUMBER()over(Order by GETDATE()) as OrderID
  FROM dbo.NCC_PackageMstr PM
  INNER JOIN CTE ON PM.ParentPkgCode=CTE.PkgCode
)
select CTE.*
from CTE
WHERE ProjectSN='XX1406052' AND TreePath LIKE '20ST01-Y-ST-0001%'
ORDER BY LTRIM(OrderID);

改语句的执行结果:

希望得到的执行结果:

目的就是统计下级节点的PkgQty给上级节点,希望诸位大神能指点一二
------解决方案--------------------
你再update一下CTE表的PkgQty,大致为:
upate cte
set PkgQty = (select count(1)-1 from cte temp where temp.orderID like orderID )

------解决方案--------------------
1楼不是写了吗?直接UPDATE
------解决方案--------------------
分步完成,先产生为临时表,然后统计.
  相关解决方案