Sql 统计报表

xieyue793162689 2012-01-11 11:45:42
现有三张表如下:
table1(频道表)
id code name
1 001 美食频道
2 002 音乐频道
3 003 购物频道

table2(频道业务表,Code与table1中的Code关联)
bid code bname
1 001 西餐
2 001 中餐
3 002 动感地带音乐

table3(数据表)
did bname loginname
1 西餐 xy
2 动感地带音乐 zw


请根据这三张表,统计出
1,频道访问数
频道名 访问次数
美食频道 1
音乐频道 1
购物频道 0

2业务访问数(根据某个频道统计业务访问次数。例如:美食频道)
业务名 访问次数
西餐 1
中餐 0

在此先谢过大家!
...全文
105 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xieyue793162689 2012-01-11
  • 打赏
  • 举报
回复
其实我就是第一句sql语句有难度,要统计频道的访问次数,先得看数据表业务名称属于哪个频道的,然后再统计的
xieyue793162689 2012-01-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 acherat 的回复:]
SQL code


--1
select a.name,count(*) cnt
from table1 a left join table2 b on a.code = b.code
group by a.name
[/Quote]


这个语句有问题吧?要关联table3,你只是拿业务表跟频道表进行关联统计而已啊
勿勿 2012-01-11
  • 打赏
  • 举报
回复
关联查询!!
AcHerat 2012-01-11
  • 打赏
  • 举报
回复

--2
select b.bname,count(*) cnt
from table1 a join table2 b on a.code = b.code
left join table3 c on b.bname = c.bname
where a.name = '美食频道'
group by b.bname
AcHerat 2012-01-11
  • 打赏
  • 举报
回复

--1
select a.name,count(*) cnt
from table1 a left join table2 b on a.code = b.code
group by a.name
xieyue793162689 2012-01-11
  • 打赏
  • 举报
回复
楼上的答案正确,刚准备结账,就把多的分都给你吧!
百年树人 2012-01-11
  • 打赏
  • 举报
回复
if object_id('[table1]') is not null drop table [table1]
go
create table [table1]([id] int,[code] varchar(3),[name] varchar(8))
insert [table1]
select 1,'001','美食频道' union all
select 2,'002','音乐频道' union all
select 3,'003','购物频道'
go

if object_id('[table2]') is not null drop table [table2]
go
create table [table2]([bid] int,[code] varchar(3),[bname] varchar(12))
insert [table2]
select 1,'001','西餐' union all
select 2,'001','中餐' union all
select 3,'002','动感地带音乐'
go

if object_id('[table3]') is not null drop table [table3]
go
create table [table3]([did] int,[bname] varchar(12),[loginname] varchar(2))
insert [table3]
select 1,'西餐','xy' union all
select 2,'动感地带音乐','zw'
go

select a.name as 频道名,isnull(t.cnt,0) as 访问次数
from table1 a
left join
(select b.code,count(1) as cnt from table2 b
join table3 c on b.bname=c.bname
group by b.code) t
on a.code=t.code
/**
频道名 访问次数
-------- -----------
美食频道 1
音乐频道 1
购物频道 0

(3 行受影响)
**/

select b.bname as 业务名,isnull(t.cnt,0) as 访问次数
from table2 b
join table1 a on a.code=b.code and a.name='美食频道'
left join
(select bname,count(1) as cnt from table3
group by bname) t
on b.bname=t.bname
/**
业务名 访问次数
------------ -----------
西餐 1
中餐 0

(2 行受影响)
**/
xieyue793162689 2012-01-11
  • 打赏
  • 举报
回复
哈哈!谢谢各位,我已经解决!虽然答案都不对!还是每人都给点分!
yslwl 2012-01-11
  • 打赏
  • 举报
回复
不知道这样可以不:
Select
M.name As '频道名',
Count(c.loginname) As '访问次数'
From table1 M
Left Join table2 D On M.code=D.code
Left Join table3 C On D.bname=c.bname
Group by M.name

Select
D.bname As '业务名',
Count(c.loginname) As '访问次数'
From table1 M
Left Join table2 D On M.code=D.code
Left Join table3 C On D.bname=c.bname
Where M.name='美食频道'
Group by D.bname

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧