MSSQL关于凭证科目递归,求助大神_MSSQL_编程问答 问题: MSSQL关于凭证科目递归,求助大神

解决方案1:

e.g.

Create table pz
(  
id int not null,  
pid int,  
kemu varchar(100),
d decimal(20,8),
c decimal(20,8),
name varchar(100)
)  
 
insert into pz(id,pid,kemu,d,c,name)   
select 1,null,'1001',200,300,'现金'
union all  
select 2,null,'1002',0,200,'存款' 
union all  
select 3,null,'1003',200,0,'票据'
union all  
select 4,2,'100201',300,0,'农行'
union all  
select 5,4,'10020102',300,0,'盐城'
union all  
select 6,5,'1002010201',500,0,'D卡'
union all  
select   8,1,'100101',1000,600,'A柜'
union all  
select 9,7,'10010102',1500,700,'A柜一层'
union all  
select 7,1,'100102',800,10001,'B柜'
union all  
select 8,1,'100101',700,1200,'A柜'
GO
;WITH CTET
AS
(
SELECT *,name2=CAST(name AS VARCHAR(100))FROM pz WHERE pid IS NULL
UNION ALL
SELECT a.*,CAST(b.name2+'->'+a.name AS VARCHAR(100)) FROM pz AS a INNER JOIN CTET AS b ON b.id=a.pid
)
SELECT  id ,
        pid ,
        kemu ,
        d ,
        c ,
        name2 AS name
FROM    CTET
ORDER BY CTET.kemu;
/*
id pid kemu d c name
1 NULL 1001 200.00000000 300.00000000 现金
8 1 100101 1000.00000000 600.00000000 现金->A柜
8 1 100101 700.00000000 1200.00000000 现金->A柜
9 7 10010102 1500.00000000 700.00000000 现金->B柜->A柜一层
7 1 100102 800.00000000 10001.00000000 现金->B柜
2 NULL 1002 0.00000000 200.00000000 存款
4 2 100201 300.00000000 0.00000000 存款->农行
5 4 10020102 300.00000000 0.00000000 存款->农行->盐城
6 5 1002010201 500.00000000 0.00000000 存款->农行->盐城->D卡
3 NULL 1003 200.00000000 0.00000000 票据
*/

上一篇MSSQL关于凭证科目递归,求助大神
下一篇一个关于索引的疑问
明星图片
相关文章
《 MSSQL关于凭证科目递归,求助大神》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)