sql父级节点显示所有子节点的数量和金额的合计

我有两张表,第一张表是树形结构层级关系。第二张表的数据是第一张表层级中最低级节点下的合同,只能在最低级添加合同,我现在需要通过sql统计每个部门下所有的合同,和所有的合同... 我有两张表,第一张表是树形结构层级关系。第二张表的数据是第一张表层级中最低级节点下的合同,只能在最低级添加合同,我现在需要通过sql统计每个部门下所有的合同,和所有的合同金额。公司层级部分显示所有的当前公司下所有部门的合同数量和金额,集团显示所有公司下的所有合同数量和金额 展开
 我来答
鲜美还清湛灬白桦N
推荐于2017-09-27 · TA获得超过621个赞
知道小有建树答主
回答量:404
采纳率:50%
帮助的人:529万
展开全部
--测试环境MSSQL2008
--建表
Create Table M
(
    编号 int,
    名称 Varchar(20),
    编号父级 int
)

Create Table N
(
    编号 int,
    内容 Varchar(20),
    M_编号 int,
    金额 int
)

--插入数据
Insert into M values(1,'集团',0)
Insert into M values(2,'第一公司',1)
Insert into M values(3,'第二公司',1)
Insert into M values(4,'第三公司',1)
Insert into M values(5,'人力资源',2)
Insert into M values(6,'行政部',2)
Insert into M values(7,'政治部',2)
Insert into M values(8,'人力资源',3)
Insert into M values(9,'行政部',3)
Insert into M values(10,'政治部',3)
Insert into M values(11,'人力资源',4)
Insert into M values(12,'行政部',4)
Insert into M values(13,'政治部',4)
insert into N Values(1,'内容1',5,10)
insert into N Values(2,'内容2',5,10)
insert into N Values(3,'内容3',5,10)
insert into N Values(4,'内容4',6,10)
insert into N Values(5,'内容5',6,10)
insert into N Values(6,'内容6',6,10)
insert into N Values(7,'内容7',6,10)
insert into N Values(8,'内容8',7,10)
insert into N Values(9,'内容9',7,10)
insert into N Values(10,'内容10',8,10)
insert into N Values(11,'内容11',9,10)
insert into N Values(12,'内容12',11,10)

--查询 
With CT
AS
(
    select M.*,N.金额,N.编号 As N_编号  from M  left join N on M.编号=N.M_编号 
    union all
    select M.*,CT.金额,CT.N_编号 from CT inner join M 
    on CT.编号父级=M.编号
)
Select 编号,名称,COUNT(N_编号) As 数量,sum(金额) As 金额 From CT
Group by  
编号,名称
order by 编号 

--只显示编号编号父级的合计
With CT
AS
(
    select M.*,N.金额,N.编号 As N_编号  from M  left join N on M.编号=N.M_编号 
    union all
    select M.*,CT.金额,CT.N_编号 from CT inner join M 
    on CT.编号父级=M.编号
)
Select 编号,名称,COUNT(N_编号) As 数量,sum(金额) As 金额 From CT
where 编号   in (select 编号父级 from  M )  
Group by  
编号,名称
order by 编号



推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式