请教一个统计报表的sql serve 语句 谢谢大家帮助!

suiyizhu3 2012-10-31 09:32:43
create table 部门表
(
部门编号 varchar(4),
部门名称 varchar(20),
部门类别 varchar(20)
)
insert into 部门表 select '01 ', 'a营业部 ',null
insert into 部门表 select '0101 ', 'a1营业厅 ', '自有厅 '
insert into 部门表 select '0102 ', 'a2营业厅 ', '自有厅 '
insert into 部门表 select '0103 ', 'b1营业厅 ', '合作厅 '
insert into 部门表 select '0104 ', 'b2营业厅 ', '合作厅 '
insert into 部门表 select '0104 ', 'b3营业厅 ', '合作厅 '

--------------------------------------------------------------------
create table 收费表
(

项目名称 varchar(20),
当日营业款 decimal(13,2),
日期 datetime,
所属部门 varchar(20)
)
insert into 收费表 select '合作厅营业款 ',10000, '2012-1-1 ', 'b1营业厅 '
insert into 收费表 select '合作厅营业款 ',20000, '2012-1-1 ', 'b2营业厅 '
insert into 收费表 select '合作厅营业款 ',15000, '2012-1-2 ', 'b1营业厅 '
insert into 收费表 select '合作厅营业款 ',30000, '2012-1-2 ', 'b2营业厅 '

----------------------------------------------------------------------

create table 押金表
(
合作厅名称 varchar(20),
押金金额 decimal(13,2),
交款日期 datetime,
补交押金金额 decimal(13,2),
退还押金金额 decimal(13,2)
)
insert into 押金表 select 'b1营业厅 ',1000, '2012-1-1 ',500,300
insert into 押金表 select 'b2营业厅 ',2000, '2012-1-1 ',1000,600
insert into 押金表 select 'b1营业厅 ',3000, '2012-1-2 ',1500,400
insert into 押金表 select 'b2营业厅 ',4000, '2012-1-2 ',2000,800
--------------------------------------------------------------------------
/*
要生成的报表格式为:(按照收费表的日期区间范围进行统计,例如统计2012-1-1到2012-1-2这2天的数据)
合作厅名称 押金余额 总收费额 日平均收费额 差额
b1营业厅 5300 25000 12500 7200
b2营业厅 7600 50000 25000 17400
b3营业厅 0 0 0 0
*/
drop table 部门表
drop table 收费表
drop table 押金表
/*
报表数据说明:

合作厅名称:指部门表中所有类别为“合作厅”的营业厅
押金余额=指押金表中的“押金金额+补交押金金额-退还押金金额”注意:这里的押金余额是累加的,即2012-1-2的余额=2012-1-1的余额+2012-1-2的余额
总收费额=收费表中2012-1-1到2012-1-2时间段内,每个合作厅当日营业款的总和
日平均收费额=总收费额/2012-1-1到2012-1-2之间的天数(按照收费表的日期范围进行统计)
差额=日平均收费额-押金余额

------------------------------------------------------------
如果对应部门表里的合作厅没有费用产生,请将报表中各种费用设置为0.00
*/
...全文
136 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
suiyizhu3 2012-10-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

SQL code

select 部门表.部门名称,
押金余额=isnull(押金表.押金余额,0),
总收费额=isnull(收费表.总收费额,0),
日平均收费额=isnull(收费表.日平均收费额,0),
差额=isnull(收费表.日平均收费额,0)-isnull(押金表.押金余额,0)
from 部门表
left join
(
select 合作厅名称, 押金……
[/Quote]
测试米有问题,太感谢了。。这下我可以下班了。
發糞塗牆 2012-10-31
  • 打赏
  • 举报
回复
我在等升级脚本,今晚还要继续
汤姆克鲁斯 2012-10-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

想弄,没精力想,连续一周4、5点睡,顶不住了。
[/Quote]
我草啊 你真好精力啊。。。。。年轻就是好。
汤姆克鲁斯 2012-10-31
  • 打赏
  • 举报
回复

select 部门表.部门名称,
押金余额=isnull(押金表.押金余额,0),
总收费额=isnull(收费表.总收费额,0),
日平均收费额=isnull(收费表.日平均收费额,0),
差额=isnull(收费表.日平均收费额,0)-isnull(押金表.押金余额,0)
from 部门表
left join
(
select 合作厅名称, 押金余额=sum(押金金额+补交押金金额-退还押金金额)
from 押金表
group by 合作厅名称
)押金表 on 部门表.部门名称=押金表.合作厅名称
left join
(
select 所属部门, 总收费额=sum(当日营业款),
日平均收费额=sum(当日营业款)/datediff(day, '2012-1-1','2012-1-3')
from 收费表
where 日期> = '2012-1-1' and 日期 < '2012-1-3'
group by 所属部门
)收费表 on 部门表.部门名称=收费表.所属部门
where 部门表.部门类别= '合作厅'
/*
部门名称 押金余额 总收费额 日平均收费额 差额
b1营业厅 5300.00 25000.00 12500.000000 7200.00
b2营业厅 7600.00 50000.00 25000.000000 17400.00
b3营业厅 0.00 0.00 0.000000 0.00

*/
發糞塗牆 2012-10-31
  • 打赏
  • 举报
回复
奇怪,咋没人帮你呢?等下我回复了就一串人来我抽时间看看,不保证,有人回复你就结贴吧....
suiyizhu3 2012-10-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

想弄,没精力想,连续一周4、5点睡,顶不住了。
[/Quote]
我折腾后好久,帮帮忙吧,最后一个问题了。
發糞塗牆 2012-10-31
  • 打赏
  • 举报
回复
想弄,没精力想,连续一周4、5点睡,顶不住了。
suiyizhu3 2012-10-31
  • 打赏
  • 举报
回复
请高手看看这个问题

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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