当前位置: 代码迷 >> SQL >> 利用 Sqlserver CTE 开展树结构统计
  详细解决方案

利用 Sqlserver CTE 开展树结构统计

热度:417   发布时间:2016-05-05 11:04:29.0
利用 Sqlserver CTE 进行树结构统计
总结一下这段时间做的统计功能点。
下面的例子是利用sqlserver CTE 自下到上做树形结构的统计。
统计出每个节点的值都是下级节点的总和。


树形结构存储表:

CREATE TABLE [00_APP].[test_node](	[id] [bigint] IDENTITY(1,1) NOT NULL,	[nodename] [varchar](50) NULL, --节点名称	[parentid] [bigint] NULL, -- 上级节点ID	[nodetype] [bigint] NULL,-- 节点类型:1 节点,2 叶子PRIMARY KEY CLUSTERED (	[id] ASC)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]) ON [PRIMARY]GO


数据:





/******* 生成统计表 *******/ WITH    suborgs          AS (			   SELECT  [00_APP].test_node.id ,			           [00_APP].test_node.nodename ,			           [00_APP].test_node.parentid ,			           [00_APP].test_node.nodetype,			           			           -- 增加统计列 			           [00_APP].test_node.nodename AS val 			                          FROM    [00_APP].test_node WITH ( NOLOCK )               WHERE nodetype = 2 -- 叶子节点                              UNION ALL                          SELECT  node.id ,                       node.nodename ,                       node.parentid ,                       node.nodetype ,                       -- 增加的统计列                        suborgs.val                                      FROM     suborgs                  INNER JOIN  [00_APP].test_node  AS node  ON suborgs.parentid = node.id  AND node.nodetype= 1 -- 非叶子节点              )-- 可根据 group 条件对 “统计列” 进行统计              SELECT * FROM suborgs AS tres 


结果:












  相关解决方案