;WITH t AS (
SELECT 1 ID, 1 EmployeeID, '2014-05-19' BeginDate, '2014-05-25' EndDate UNION
SELECT 2 ID, 2 EmployeeID, '2014-05-12' BeginDate, '2014-05-18' EndDate
),r AS(
SELECT 1 ID, 1 EmployeeID, '2014-05-14' RDate, 8 Num UNION
SELECT 1 ID, 1 EmployeeID, '2014-05-15' RDate, 3 Num UNION
SELECT 2 ID, 1 EmployeeID, '2014-05-20' RDate, 2 Num
)
/*
* 想要如下结果:
* ID EmployeeID BeginDate EndDate SumHours
----------- ----------- ---------- ---------- -----------
1 1 2014-05-19 2014-05-25 11
1 1 2014-05-19 2014-05-25 2
*/
------解决方案--------------------
select t.ID, t.EmployeeID, t.BeginDate, t.EndDate, sum(r.Num)
from t, r
where t.id = r.id and t.EmployeeID = r.EmployeeID and r.RDate between t.BeginDate and t.EndDate
group by t.ID, t.EmployeeID, t.BeginDate, t.EndDate
------解决方案--------------------
结果有问题吧?没看懂呀
------解决方案--------------------
你确定是这样的结果,数据没有问题?t表和r表的id,employeeid有关联么
------解决方案--------------------
id和employeeid没关联的话,就是下面这样
WITH t AS (
SELECT 1 ID, 1 EmployeeID, '2014-05-19' BeginDate, '2014-05-25' EndDate UNION
SELECT 2 ID, 2 EmployeeID, '2014-05-12' BeginDate, '2014-05-18' EndDate
),r AS(
SELECT 1 ID, 1 EmployeeID, '2014-05-14' RDate, 8 Num UNION
SELECT 1 ID, 1 EmployeeID, '2014-05-15' RDate, 3 Num UNION
SELECT 2 ID, 1 EmployeeID, '2014-05-20' RDate, 2 Num )
select t.*,num=(select SUM(num) from r where r.RDate between t.begindate and t.enddate)
from t
------解决方案--------------------
有关联的话自己在子查询里面加
------解决方案--------------------
;WITH t AS (
SELECT 1 ID, 1 EmployeeID, '2014-05-19' BeginDate, '2014-05-25' EndDate UNION
SELECT 2 ID, 2 EmployeeID, '2014-05-12' BeginDate, '2014-05-18' EndDate
),r AS(
SELECT 1 ID, 1 EmployeeID, '2014-05-14' RDate, 8 Num UNION
SELECT 1 ID, 1 EmployeeID, '2014-05-15' RDate, 3 Num UNION
SELECT 2 ID, 1 EmployeeID, '2014-05-20' RDate, 2 Num
)
/*
想要如下结果:
ID EmployeeID BeginDate EndDate SumHours
----------- ----------- ---------- ---------- -----------
1 1 2014-05-19 2014-05-25 11
1 1 2014-05-19 2014-05-25 2
*/
select t.id,t.EmployeeID,BeginDate,EndDate,sum(Num) as SumHours from t inner join r on t.EmployeeID=r.EmployeeID where RDate not between BeginDate and EndDate group by t.id,t.EmployeeID,BeginDate,EndDate