日期:2014-05-17  浏览次数:20555 次

伸伸你的手,小小问题,看看 CTE 递归


上面是要实现的效果图!




这个图是数据表的内容



这个图是自己写的,但是效果达不到,大神指定,
行业数据 递归

------解决方案--------------------
有数据就好办
----------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-05-29 11:48:33
-- Version:
--      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 
-- Jun 17 2011 00:54:03 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1, v.721)
--
----------------------------
--> 测试数据:[会计科目]
if object_id('[会计科目]') is not null drop table [会计科目]
go 
create table [会计科目]([ID] int,[名字] varchar(14),[父级ID] int,[累计金额] numeric(6,2),[是否系统科目] int)
insert [会计科目]
select 1,'【收入类】',0,0.00,1 union all
select 2,'【支出类】',0,0.00,1 union all
select 3,'【利润】',0,100.00,1 union all
select 4,'『销售收入』',1,400.00,1 union all
select 5,'『其他收入』',1,0.00,1 union all
select 6,'『采购支出』',2,1500.00,1 union all
select 7,'『其他支出』',2,0.00,1 union all
select 8,'其他收入',5,0.00,0 union all
select 9,'其他…',5,0.00,0 union all
select 10,'其他支出',7,0.00,0 union all
select 11,'其他…',7,0.00,0 union all
select 12,'『商品类收入』',1,0.00,0 union all
select 13,'『商品类支出』',2,0.00,0 union all
select 14,'报溢收入',12,0.00,0 union all
select 15,'报损支出',13,0.00,0
--------------开始查询--------------------------

;WITH T_会计科目 AS ( 
SELECT [ID],[名字],[父级ID] ,[ID] AS ORDERID
FROM [会计科目]  
WHERE [父级ID]=0 
UNION ALL 
SELECT a.[ID],a.[名字],a.[父级ID] , a.[父级ID]
FROM [会计科目] a INNER JOIN T_会计科目 b ON a.[父级ID]=b.id 

SELECT [ID],[名字],[父级ID] 
FROM T_会计科目
ORDER BY ORDERID
----------------结果----------------------------
/* 
ID          名字             父级ID
----------- -------------- -----------
1           【收入类】          0
4           『销售收入』         1
5           『其他收入』      &nb