当前位置: 代码迷 >> Sql Server >> 主表有时间段,从表有该时间段的日期跟数量,把从表的数量合计显示到主表
  详细解决方案

主表有时间段,从表有该时间段的日期跟数量,把从表的数量合计显示到主表

热度:93   发布时间:2016-04-24 10:37:38.0
主表有时间段,从表有该时间段的日期和数量,把从表的数量合计显示到主表
;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

------解决方案--------------------
引用:
;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 
*/

结果有问题吧?没看懂呀
------解决方案--------------------
你确定是这样的结果,数据没有问题?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
  相关解决方案