首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

月统计有关问题。

2012-03-22 
月统计问题。。。。部门BranchIDNAME新闻NewsID BranchID titleadddate怎么统计 今年每日 每月, 每个部门的发

月统计问题。。。。
部门
BranchID NAME
新闻
NewsID BranchID title adddate

怎么统计 今年每日 每月, 每个部门的发文数据。。当日 或当月没有发文 等于 0 。。。。


[解决办法]
--按照日期的:

SQL code
--sql 2000declare @sdate datetimedeclare @edate datetimeset @sdate = '2012-01-01'set @edate = getdate()select t1.* , isnull((select count(1) from 新闻 t2 where t2.BranchID = t1.BranchID and datediff(dd,t1.dt,t2.adddate) = 0),0) 数量 from(select m.dt , n.BranchID from(select     dateadd(dd,num,@sdate) dtfrom     (select isnull((select count(1) from sysobjects where id<t.id),0) as num from sysobjects t) awhere    dateadd(dd,num,@sdate)<=@edate) m , 部门 n) t1
[解决办法]
SQL code
/****部门BranchID NAME新闻NewsID BranchID title adddate怎么统计 今年每日 每月, 每个部门的发文数据。。当日 或当月没有发文 等于 0 。。。。*****/---只做统计每日的,每月的通过每日的统计出来----创建测试数据部门表create table #部门(BranchID varchar(20),NAME varchar(20))---建立部门数据insert into #部门(BranchID,NAME) values('01','部门1')insert into #部门(BranchID,NAME) values('02','部门2')insert into #部门(BranchID,NAME) values('03','部门3')insert into #部门(BranchID,NAME) values('04','部门4')insert into #部门(BranchID,NAME) values('05','部门5')----创建测试数据新闻表create table #新闻(NewsID varchar(20),BranchID varchar(20),title varchar(20),adddate datetime)--建立新闻数据insert into #新闻(NewsID,BranchID,title,adddate) values('0001','01','新闻1','2012-01-01 09:00:20.327')insert into #新闻(NewsID,BranchID,title,adddate) values('0002','02','新闻2','2012-01-01 09:00:20.327')insert into #新闻(NewsID,BranchID,title,adddate) values('0003','03','新闻3','2012-01-01 09:00:20.327')insert into #新闻(NewsID,BranchID,title,adddate) values('0004','01','新闻4','2012-01-02 09:00:20.327')insert into #新闻(NewsID,BranchID,title,adddate) values('0005','01','新闻5','2012-01-03 09:00:20.327')insert into #新闻(NewsID,BranchID,title,adddate) values('0006','01','新闻6','2012-01-01 10:00:20.327')--创建时间临时表create table #datetime(dt datetime)---开始和结束时间declare @sdate datetimedeclare @edate datetimeselect @sdate = '20120101'select @edate = '20120104'---定义循环变量declare @dt_temp datetimeselect @dt_temp = @sdate---建立时间临时表数据while datediff(day,@dt_temp,@edate) >= 0begin    insert into #datetime (dt)    values (@dt_temp)    set @dt_temp = dateadd(day,1,@dt_temp)endselect dt,BranchID,SUM(num)from     (select dt,brandch_dt.BranchID,#新闻.NewsID,    (case when #新闻.NewsID is null then 0 else 1 end) as num         from         (select * from #datetime,#部门) brandch_dt        left join #新闻         on datediff(day,brandch_dt.dt,#新闻.adddate) = 0         and brandch_dt.BranchID = #新闻.BranchID) bran_news_dt     group by dt,BranchID     order by BranchID 

热点排行
Bad Request.