日期:2014-05-18  浏览次数:20440 次

数据库统计一周的数据,如果数据库中不存在这一周某天的数据,如何将这一天的值显示为0,并将一周的统计结果按星期排序
数据库统计一周的数据,如果数据库中不存在这一周某天的数据,如何将这一天的值显示为0,并将一周的统计结果按星期排序


------解决方案--------------------
先产生每一周每一天的记录到一个临时表,再用这个表关联数据表的日期
------解决方案--------------------
首先把这一周的日期全部制定好格式表,再把这一周的汇总成你需要的信息,然后用日期关联显示就行了.
------解决方案--------------------
SQL code

--> 测试数据:[test]
if object_id('[test]') is not null 
drop table [test]
create table [test](
[courseID] int,
[studentID] int,
[startTime] datetime
)
go
insert [test]
select 1,1,'2012-07-16' union all
select 2,1,'2012-07-16' union all
select 3,1,'2012-07-17' union all
select 4,1,'2012-07-22'
go

declare @StartDate datetime
declare @EndDate datetime
set @StartDate='2012-07-16'
set @EndDate='2012-07-22'

;with t
as(
select 
    DATEADD(DD,number,@StartDate) as Dtes
from
    master..spt_values
where 
    type='p'
    and number between 0 and DATEDIFF(DD,@StartDate,@EndDate)
)

select
    '星期'+ltrim(DATEPART(W,Dtes)) as [week],
    SUM(case when [startTime] is null then 0 else 1 end) as [count]
from
    t
left join
    test 
on 
    t.Dtes=test.startTime
group by
    Dtes
order by
    2 desc
/*
week    count
------------------------------
星期2    2
星期1    1
星期3    1
星期6    0
星期4    0
星期7    0
星期5    0
*/

------解决方案--------------------
SQL code
select a.wd,count(courseID) from
(
select '星期一' as wd union all
select '星期二' union all
select '星期三' union all
select '星期四' union all
select '星期五' union all
select '星期六' union all
select '星期日' 
) a
left join  courseInfo  c on a.wd=datename(weekday ,c.startTime)
group by a.wd