查看作为表与每个记录的范围od日期

时间:2015-04-29 10:37:28

标签: sql for-loop sql-server-2005 view date-range

我的表格employees包含surnamenamesbirth date等。我想要的是一张表,员工表中的每一行都有日期,例如:

surname0 , day()+0
surname0 , day()+1 
surname0 , day()+2 
................. 
surname0 , day()+30 
surname1 , day()+0 
surname1 , day()+1 
surname1 , day()+2
................. 
surname1 , day()+30
.................
.................
surname100 , day()+0 
surname100 , day()+1 
surname100 , day()+2
................. 
surname100 , day()+30

我不知道该怎么做。

主要想法是列出员工名单和每天的活动数量。如果特定员工在某个特定日期没有“0”的任务。我有一个表tasks,列teams(由逗号分隔的几个姓氏组成),daytaskdescription等。所以比较一下这个表如果每个姓氏的日期范围在开头提到的那个,那么每个姓氏每天可以获得task / activities的数量。在其他方面使用像这样的smth

从员工那里选择不同的姓氏,天,计数(姓氏)(按天,姓氏划分)在团队中留下外部联接任务,如'%'+姓氏+'%'

对于没有特定日期任务的所有员工,我没有获得“0”零值的行,这就是为什么我希望该表具有天数范围并将该表与任务表相结合的原因我很容易得到以下30天的所有员工名单及其任务数量。

我在MS SQL 2005服务器上工作

谢谢!

1 个答案:

答案 0 :(得分:0)

也许您可以使用CTE(公用表表达式):

;with days as
(
  select convert(datetime,CONVERT(varchar(10), getdate(), 120)+' 00:00:00') day
  union all
  select d.day+1
  from days d
  where DATEDIFF(day,convert(datetime,CONVERT(varchar(10), getdate(), 120)+' 00:00:00'), d.day+1)<=30
)
select *
from days d
  join employees e on 1=1

有关CTE的更多信息:https://msdn.microsoft.com/en-us/library/ms175972(v=sql.90).aspx