总结一下这段时间做的统计功能点。
下面的例子是利用sqlserver CTE 自下到上做树形结构的统计。
统计出每个节点的值都是下级节点的总和。
树形结构存储表:
数据:
[img]http://dl2.iteye.com/upload/attachment/0103/5725/131e1b38-263f-38a1-83c7-f6195ab4810a.jpg[/img]
结果:
[img]http://dl2.iteye.com/upload/attachment/0103/5727/21c58832-ce05-326c-81c1-c8d23e3b732e.jpg[/img]
下面的例子是利用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
数据:
[img]http://dl2.iteye.com/upload/attachment/0103/5725/131e1b38-263f-38a1-83c7-f6195ab4810a.jpg[/img]
/******* 生成统计表 *******/
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
结果:
[img]http://dl2.iteye.com/upload/attachment/0103/5727/21c58832-ce05-326c-81c1-c8d23e3b732e.jpg[/img]