【问题标题】:View as table with range od date for each record以表格形式查看每条记录的日期范围
【发布时间】:2015-04-29 10:37:27
【问题描述】:

我有一个表 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 服务器上工作

谢谢!

【问题讨论】:

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


    【解决方案1】:

    也许您可以使用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 2023-03-26
      相关资源
      最近更新 更多