Sql server 使用表行的T-SQL查询

Sql server 使用表行的T-SQL查询,sql-server,Sql Server,因此,我有一个最小和最大日期表,如下所示: num mindate maxdate 1 x/xx/xxxx x/xx/xxxx 2 x/xx/xxxx x/xx/xxxx 3 x/xx/xxxx x/xx/xxxx ... 我现在需要做的是在多个员工的数据查询中使用min和max中的所有值,为每个员工提取所有这些日期之间的所有数据 例如,结束表如下所示: emp# empname sickdays mindate

因此,我有一个最小和最大日期表,如下所示:

num    mindate     maxdate
1      x/xx/xxxx   x/xx/xxxx
2      x/xx/xxxx   x/xx/xxxx
3      x/xx/xxxx   x/xx/xxxx
...
我现在需要做的是在多个员工的数据查询中使用min和max中的所有值,为每个员工提取所有这些日期之间的所有数据

例如,结束表如下所示:

emp#     empname     sickdays      mindate     maxdate 
0        emp1        1             x/xx/xxxx   x/xx/xxxx
0        emp1        0             x/xx/xxxx   x/xx/xxxx
1        emp2        1             x/xx/xxxx   x/xx/xxxx
1        emp2        0             x/xx/xxxx   x/xx/xxxx  
...
emp#     empname     sickdays      mindate     maxdate 
1        emp1        1             1/1/2016    1/7/2016
1        emp1        0             1/8/2016    1/14/2016
1        emp2        3             1/15/2016   1/21/2016
1        emp2        0             1/22/2016   1/29/2016
...
有人能给我指点方向,让我开始解决这个问题吗?我从来没有处理过做a(下一步为每个x do查询y),我甚至不知道该查找什么,任何帮助都会很棒

为Clarity编辑

员工数据将来自两个单独的表,并合并到一个表中,以获得员工编号、姓名、病假计数以及我需要的任何其他信息。问题是我需要为表中每个日期的每个员工运行查询,以获取每个mindate和maxdate之间的病假天数

换句话说,每个员工将在每个日期范围内每多行病假一次

因此,一名员工看起来像:

emp#     empname     sickdays      mindate     maxdate 
0        emp1        1             x/xx/xxxx   x/xx/xxxx
0        emp1        0             x/xx/xxxx   x/xx/xxxx
1        emp2        1             x/xx/xxxx   x/xx/xxxx
1        emp2        0             x/xx/xxxx   x/xx/xxxx  
...
emp#     empname     sickdays      mindate     maxdate 
1        emp1        1             1/1/2016    1/7/2016
1        emp1        0             1/8/2016    1/14/2016
1        emp2        3             1/15/2016   1/21/2016
1        emp2        0             1/22/2016   1/29/2016
...

假设有两个表Employee和EmployeeSickTime是这样的

Employee
--------------------------
EmpId int NOT NULL,
EmpName varchar(100) 

以及给定的日期范围表

ReportRanges
--------------------------
num int NOT NULL,
MinDate datetime NOT NULL,
MaxDate datetime NOT NULL
然后,此查询将提供您描述的结果。我用示例数据创建了一个工作示例,您可以查看

SELECT e.EmpId, e.EmpName, SUM(CASE WHEN est.EmpId IS NOT NULL THEN 1 ELSE 0 END) as SickDays, r.MinDate, r.MaxDate
FROM Employee e
LEFT OUTER JOIN EmployeeSickTime est ON e.EmpId=est.EmpId
LEFT OUTER JOIN ReportRange r ON est.SickDate BETWEEN r.MinDate AND r.MaxDate
WHERE r.MinDate IS NOT NULL
GROUP BY e.EmpId, e.EmpName, r.MinDate, r.MaxDate
ORDER BY e.EmpId;

empname是否总是“emp”和empnum的缩写?鉴于缺乏实际日期,病假从何而来?max和mindate的区别是什么?员工数据是什么样子的?例如,结果表中的
sickdays
列a也是员工表中的一列吗?或者是否有另一个表按empId跟踪病假天数,结果中的病假天数是第一个表的最小值和最大值之间的总和。请参阅Clarity的编辑我认为这为我指明了正确的方向,让我继续前进,谢谢!