当前位置: 代码迷 >> Sql Server >> 关于数据统计,显示解决方法
  详细解决方案

关于数据统计,显示解决方法

热度:19   发布时间:2016-04-27 14:12:27.0
关于数据统计,显示
有一个表:
日期-----小时-----生产线-----产品数量
(同一日期,可能有很多个时间段的数据;也可能在某个日期没有数据)



我想提供2个日期节点,查询这2个时间节点的统计数据,比如2012.2.20---2012.2.26:

日期------------------------生产线-----数量总计
2012.2.20 生产线A 0 (某个日期没有记录的显示情况)

2012.2.21 生产线A 80(有数据的情况:这个数字,是该日期内,所有小时数据的统计)
2012.2.22 
2012.2.23 
2012.2.24 
2012.2.25 
2012.2.26


数据统计我会,但是如果该天没有记录,怎么显示出来,不知道怎么写? 请大家帮助下



   



------解决方案--------------------
其实就是先获取一个时间段,然后使用左连接,相关内容见下:
SQL code
获取两个时间之内的所有日期--sql 2000declare @sdate datetimedeclare @edate datetimeset @sdate = '2008-10-15 00:00:000'set @edate = '2009-02-10 00:00:000'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)<[email protected]--sql 2005declare @startDate datetimedeclare @endDate datetimeSELECT @startDate = '2008-10-15' ,@endDate = '2009-01-23';WITH tb AS (SELECT @startDate AS 'date'UNION ALLSELECT DATEADD(DAY,1,date) FROM tb WHERE DATE<@endDate)SELECT tb.date from tb生成日期的方法方法一、declare @t table(s datetime)declare @s datetime,@s1 datetimeset @s = '2010-09-15'set @s1 = '2010-10-15'while @s <= @s1    begin         insert into @t select @s        set @s = dateadd(dd,1,@s)    endselect * from @t方法二、select    dateadd(dd,number,'2010-09-15') as sfrom  master..spt_valueswhere  type='p'and    dateadd(dd,number,'2010-09-15')<='2010-10-15'
------解决方案--------------------
SQL code
declare @sdt datetime,@edt datetimeselect @sdt='2012-2-20',@edt='2012-2-26'select a.*,isnull(b.数量,0) as 数量总计from(  select convert(varchar(10),dateadd(dd,number,@sdt),120) as 日期,a.生产线  from (select distinct 生产线 from tb) a,master..spt_values b  where type='P'   and dateadd(dd,number,@sdt)<[email protected]) aleft join(  select convert(varchar(10),日期,120) as 日期,生产线,sum(产品数量) as 数量  from tb  group by convert(varchar(10),日期,120),生产线) bon a.日期=b.日期 and a.生产线=b.生产线
  相关解决方案