月统计问题。。。。
部门
BranchID NAME
新闻
NewsID BranchID title adddate
怎么统计 今年每日 每月, 每个部门的发文数据。。当日 或当月没有发文 等于 0 。。。。
[解决办法]
--按照日期的:
--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
[解决办法]
/****部门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