一个日期循环问题,急求啊

我的表数据如下:
就業 遅刻 合計 残業
2011/06 26日(0) 0日(0)
2011/07 24日(0) 0日(0) 
2011/08 15日(0) 0日(0)
2011/11 26日(0) 0日(0)
2011/12 5日(0) 0日(0) 
2012/01 25日(0) 0日(0) 
2012/02 22日(0) 0日(0)
2012/03 23日(0) 0日(0) 

但是有的月份没有数据,需要显示成这样的
就業 遅刻 合計 残業
2011/06 26日(0) 0日(0)
2011/07 24日(0) 0日(0) 
2011/08 15日(0) 0日(0)
2011/09 0日(0) 0日(0)
2011/10 0日(0) 0日(0)
2011/11 26日(0) 0日(0)
2011/12 5日(0) 0日(0) 
2012/01 25日(0) 0日(0) 
2012/02 22日(0) 0日(0)
2012/03 23日(0) 0日(0)
2012/04 0日(0) 0日(0)
2012/05 0日(0) 0日(0)
合計 116日(0) 0日(0)

就是无论月份是否有数据都显示出来,但怎么去查询啊

作者: War3_Fan   发布时间: 2011-06-10

先生成一个时间表,然后左联。

作者: maco_wang   发布时间: 2011-06-10

SQL code
create table tb(就業 varchar(7),遅刻 nvarchar(10))
insert into tb select '2011/06','26日'
insert into tb select '2011/07','24日' 
insert into tb select '2011/08','15日'
insert into tb select '2011/11','26日'
insert into tb select '2011/12','5日' 
insert into tb select '2012/01','25日' 
insert into tb select '2012/02','22日'
insert into tb select '2012/03','23日'
go
select * from tb
union all
select * from(
select convert(varchar(7),dateadd(m,number,'2011/06/01'),111)dt,'0日' cd from master..spt_values where type='p' and number<12 
)t where not exists(select 1 from tb where 就業=t.dt) order by 就業
go
drop table tb
/*
就業      遅刻
------- ----------
2011/06 26日
2011/07 24日
2011/08 15日
2011/09 0日
2011/10 0日
2011/11 26日
2011/12 5日
2012/01 25日
2012/02 22日
2012/03 23日
2012/04 0日
2012/05 0日

(12 行受影响)
*/

作者: qianjin036a   发布时间: 2011-06-10

SQL code
 要先生成一张 日期填充表,然后 left join

作者: abcjun188   发布时间: 2011-06-10

引用 2 楼 qianjin036a 的回复:
SQL code
create table tb(就業 varchar(7),遅刻 nvarchar(10))
insert into tb select '2011/06','26日'
insert into tb select '2011/07','24日'
insert into tb select '2011/08','15日'
insert into tb select '2……

select convert(varchar(7),dateadd(m,number,'2011/06/01'),111)dt,'0日' cd from master..spt_values where type='p' and number<12

这段话是从哪里来的啊

作者: War3_Fan   发布时间: 2011-06-10

最后一行“合计”,你用union将合计前的数据和合计这样连起来

作者: cosmo_sei   发布时间: 2011-06-10

引用 4 楼 war3_fan 的回复:
引用 2 楼 qianjin036a 的回复:
SQL code
create table tb(就業 varchar(7),遅刻 nvarchar(10))
insert into tb select '2011/06','26日'
insert into tb select '2011/07','24日'
insert into tb select '2011/08','15日'
……

master..spt_values 是一个系统视图,可以从其中引用自然数序列.

作者: qianjin036a   发布时间: 2011-06-10