统计报表存储过程

bychgh 2011-10-09 02:25:39
有三张表,组织机构,用户表,用户登录表

组织机构: zzjg_id,zzjg_name
用户表: yh_id,zzjg_id,yh_name
用户登录表: login_id,yh_id,login_time
根据传入的时间,统计所有用户,在该段时间内,登录的总次数
返回数据如:
zzjg_id yh_id login_time 登录的总次数

请高手帮忙写个存储过程数据插入临时表,谢谢
...全文
133 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bychgh 2011-10-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fredrickhu 的回复:]

SQL code
create proc test
(
@starttime,
@endtime
)
as
begin
select
a.zzjg_id,b.yh_id,c.login_time,count(c.login_time) as 登录的总次数
from
组织机构 a,用户表 b ,用户登录表 c
where
a.zzjg_id=b.zzjg_id
and
……
[/Quote]

我这样写结果只有一行不正确,怎么改?


ALTER proc [dbo].[sp_AssessInfo]
(
@starttime datetime,
@endtime datetime
)
as
begin
declare @i int --
declare @row int --
declare @LoginNum int -- 登录次数



declare @Zzjg_id int --
declare @Yh_id int --



SET NOCOUNT ON;
--if exists (select * from dbo.sysobjects where id = object_id(N'[CL].[TempCountOne]') and OBJECTPROPERTY(id, N'IsTable') = 1)
-- drop Table [CL].[TempCountOne]
-- ---创建统计表
--Create Table TempCountOne(
-- id int IDENTITY (1, 1) NOT NULL ,
-- zzjg_id int,
-- yh_id int,
-- loginNum int
--)

IF OBJECT_ID ( 'tempdb..#TotalRecord_PS') IS NOT NULL
drop table #TotalRecord_PS;
create table #TotalRecord_PS(
id int IDENTITY (1, 1) NOT NULL ,
zzjg_id int,
yh_id int,
loginNum int
);


--select
-- a.zzjg_id,b.yh_id,c.userLoginTime,count(c.userLoginTime) as LoginNum
--from
-- tb_zzjg a,tb_yh b,tb_loginLog c
--where
-- a.zzjg_id=b.zzjg_id
--and
-- b.yh_id=c.userID
--and
-- userLoginTime between @starttime and @endtime

--group by
-- a.zzjg_id,b.yh_id,c.userLoginTime

select @Zzjg_id=zzjg_id from tb_zzjg
select @Yh_id=yh_id from tb_yh where zzjg_id=@Zzjg_id

select @LoginNum=count(c.userLoginTime) from tb_zzjg a,tb_yh b,tb_loginLog c
where userID=@Yh_id and userLoginTime between @starttime and @endtime

insert into #TotalRecord_PS(zzjg_id,yh_id,loginNum) values(@Zzjg_id,@Yh_id,@LoginNum)

select * from #TotalRecord_PS
end





会说话的哑巴 2011-10-09
  • 打赏
  • 举报
回复
只要计算出登录的总次数,其他的都比较容易了:
select
count(*) as 登录的总次数
from
组织机构 a,用户表 b ,用户登录表 c
where
a.zzjg_id=b.zzjg_id
and
b. yh_id=c. yh_id
and
logintime between @starttime and @endtime。
另外感觉临时表表结构有点问题,logintime是否应该改为某时间段?
NBDBA 2011-10-09
  • 打赏
  • 举报
回复
create proc test 
(
@starttime,
@endtime
)
as
begin
select
a.zzjg_id,b.yh_id,convert(varchar(10),c.login_time,120) as login_time,count(c.login_time) as 登录的总次数
from
组织机构 a,用户表 b ,用户登录表 c
where
a.zzjg_id=b.zzjg_id
and
b. yh_id=c. yh_id
and
logintime between @starttime and @endtime
group by
a.zzjg_id,b.yh_id,convert(varchar(10),c.login_time,120)

end
会说话的哑巴 2011-10-09
  • 打赏
  • 举报
回复
前段时间刚看了下存储过程的写法,我先写写看。。。
--小F-- 2011-10-09
  • 打赏
  • 举报
回复
create proc test 
(
@starttime,
@endtime
)
as
begin
select
a.zzjg_id,b.yh_id,c.login_time,count(c.login_time) as 登录的总次数
from
组织机构 a,用户表 b ,用户登录表 c
where
a.zzjg_id=b.zzjg_id
and
b. yh_id=c. yh_id
and
logintime between @starttime and @endtime
group by
a.zzjg_id,b.yh_id,c.login_time

end

22,209

社区成员

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

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