总结一下这段时间做的统计功能点。
下面的例子是利用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
结果: