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的编辑我认为这为我指明了正确的方向,让我继续前进,谢谢!