欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

请问多个表查询统计的一个sql语句

更新时间: 2014-01-05 02:18:21 责任编辑: Author_N1

 

请教多个表查询统计的一个SQL语句
现有几个书架,每个书架上放若干书,知道每本书的总页数,每本书的目录,每个目录的小节
现在想统计每个书架上的书的总册数,总页数,目录总数,及小节总数

即有四个表

书架表A
书架ID 书架名     书ID  书名
1        书架A     1    NAME1
1        书架A     2    NAME2
2        书架B     3    NAME3
2        书架B     4    NAME4 

书表B
书ID    书页数
1        100
2        200
3        300
4        400

目录表C
书ID    目录ID
1        1000         
1        1001
2        1002
2        1003
3        1004
3        1005
4        1006
4        1007


小节表D
目录ID       小节名称
1000          a
1000          b
1001          a
1001          b
1002          a
1002          b
1003          a
1003          b
1003          c
........
1007          f




想形成下面这样的统计结果

书架名    书总数   总页数  目录总数   小节总数
书架A                   
书架B      

请大家教我怎么写这个SQL语句啊?
--参考方法--
create table A(书架ID int,书架名  varchar(10),书ID int, 书名 varchar(10))
insert into A
select '1','书架A','1','NAME1'
union all select '1','书架A','2','NAME2'
union all select '2','书架B','3','NAME3'
union all select '2','书架B','4','NAME4'

create table B(书ID  int,书页数 int)
insert into B
select 1,100
union all select 2,200
union all select 3,300
union all select 4,400

create table C(书ID  int,目录ID int)
insert into C
select 1,1000
union all select 1,1001
union all select 2,1002
union all select 2,1003
union all select 3,1004
union all select 3,1005
union all select 4,1006
union all select 4,1007

create table D(目录ID  int,小节名称 varchar(10))
insert into D
select 1000,'a'
union all select 1000,'b'
union all select 1001,'a'
union all select 1001,'b'
union all select 1002,'a'
union all select 1002,'b'
union all select 1003,'a'
union all select 1003,'b'
union all select 1003,'c'
go


select A.书架名,count(1) as 书总数,SUM(B.书页数) as 书页数,COUNT(C.目录ID) as 目录总数,count(D.小节名称) as 小节名称
from A
left join B on A.书ID=B.书ID
left join C on A.书ID=C.书ID
left join D on C.目录ID=D.目录ID
group by A.书架名

/*
书架名 书总数 书页数 目录总数 小节名称
书架A 9 1400 9 9
书架B 4 1400 4 0
*/



--参考方法--
第一次统计有误,应该这样:

create table A(书架ID int,书架名  varchar(10),书ID int, 书名 varchar(10))
insert into A
select '1','书架A','1','NAME1'
union all select '1','书架A','2','NAME2'
union all select '2','书架B','3','NAME3'
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:18:21
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/8286/
本文WWW.DOC100.NET DOC100.NET版权所有。