2016-05-10 24 views
1

目标: 创建一个视图/大部分是自动的历史数据集显示聘请了在任何时间员工人数 - 因此,我希望将数据输出到是这样的:历史数据测试在SQL

表 - [日期],[员工的积极计数]

方法:所以我已经构建了以下2个表:

  • TABLEA - [日期] < --Cont AINS时间(白天)从01012014 - 01012016
  • TABLEB - [开始日期],[结束日期] < --Contains 30000与一系列的其他人口参数记录的工作人员开始和结束日期

什么我想需要做的是建立一个CASE/IF语句其中:

IF TableA.[Dates] >= TableB.[Start Date] 
     AND (TableA.[Date] <= TableB.[End Date] OR TableA.[Date] IS NULL) 
      THEN <<count +1 or something>> 
       END AS [Active Employee Count] 

我想在那里我坚持的是:

  • 想出一个办法的日期可以与表B
  • 连接逐行检查
  • 从表A中的每一行执行它自己的检查和检索“活动的员工数”

非常表演的行开放的建议是否我构造这个问题是错误的......我吸收时间序列数据如此开放的建议。

谢谢!

穆斯塔法

+0

其中的RDBMS用的?请添加一个标签来指定您是使用'mysql','postgresql','sql-server','oracle'还是'db2' - 或者其他的东西。 –

+0

对不起! SQL-Server中。 – Brrrr

+0

你打算如何使用它?就像,你想给它一个随机的日期,它告诉你有多少人在那一天工作?我觉得存储过程可能更合适。如果是这样,让我知道,我会发布一个答案 – LordBaconPants

回答

0
SELECT COUNT(EMPNAME), 
     [DATE] 
from (
    select TABLEB.EMPNAME, 
      TABLEA.[DATE ] 
    from TABLEB 
    cross join TABLEA 
    where TABLEA.[date] >= TABLEB.StartDate 
     and TABLEA.[date] <= TABLEB.ENDDATE 
     ) AS T 
group by [DATE]; 
+0

没有'on'的'join'不是一个有效的语法。它看起来应该是'on'而不是'where'。 –

+0

感谢弗拉基米尔指出了这个错误。我已更新查询。 –

+0

这样做。非常感谢。 – Brrrr