Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql ial将查找TimeEnteredDate所属的范围。 CREATE TABLE ResourceTimeTypeCost ( ResourceCode VARCHAR(32), TimeTypeCode VARCHAR(32), Effective_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql ial将查找TimeEnteredDate所属的范围。 CREATE TABLE ResourceTimeTypeCost ( ResourceCode VARCHAR(32), TimeTypeCode VARCHAR(32), Effective

Sql ial将查找TimeEnteredDate所属的范围。 CREATE TABLE ResourceTimeTypeCost ( ResourceCode VARCHAR(32), TimeTypeCode VARCHAR(32), Effective,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,ial将查找TimeEnteredDate所属的范围。 CREATE TABLE ResourceTimeTypeCost ( ResourceCode VARCHAR(32), TimeTypeCode VARCHAR(32), EffectiveDate DATETIME, CostRate DECIMAL(12,2) ) ('ResourceA', 'Normal', '2012-04-30', 40.00) ('ResourceA', 'Normal', '2012-05-0

ial将查找TimeEnteredDate所属的范围。
CREATE TABLE ResourceTimeTypeCost (
 ResourceCode VARCHAR(32),
 TimeTypeCode VARCHAR(32),
 EffectiveDate DATETIME,
 CostRate DECIMAL(12,2)
)
('ResourceA', 'Normal', '2012-04-30', 40.00)
('ResourceA', 'Normal', '2012-05-04', 50.00) 
CREATE TABLE TimeEntered (
 ResourceCode VARCHAR(32),
 TimeTypeCode VARCHAR(32),
 ProjectCode VARCHAR(32),
 ActivityCode VARCHAR(32),
 TimeEnteredDate DATETIME,
 HoursWorked DECIMAL(12,2)
)
('ResourceA','Normal','Project1','Management1','2012-04-30',7.5)
('ResourceA','Normal','Project1','Management1','2012-05-01',7.5)
('ResourceA','Normal','Project1','Management1','2012-05-02',7.5)
('ResourceA','Normal','Project1','Management1','2012-05-03',7.5)
('ResourceA','Normal','Project1','Management1','2012-05-04',7.5)
('ResourceA','Normal','Project1','Management1','2012-05-07',7.5)
('ResourceA','Normal','Project1','Management1','2012-05-08',7.5)
IF OBJECT_ID ('tempdb..#ResourceTimeTypeCost') IS NOT NULL DROP TABLE #ResourceTimeTypeCost
CREATE TABLE #ResourceTimeTypeCost (  ResourceCode VARCHAR(32),  TimeTypeCode VARCHAR(32),  EffectiveDate DATETIME,  CostRate DECIMAL(12,2) ) 
INSERT INTO #ResourceTimeTypeCost 
SELECT 'ResourceA' as resourcecode, 'Normal' as timetypecode, '2012-04-30' as effectivedate, 40.00 as costrate
UNION ALL
SELECT 'ResourceA', 'Normal', '2012-05-04', 50.00

IF OBJECT_ID ('tempdb..#TimeEntered') IS NOT NULL DROP TABLE #TimeEntered
CREATE TABLE #TimeEntered (  ResourceCode VARCHAR(32),  TimeTypeCode VARCHAR(32),  ProjectCode VARCHAR(32),  ActivityCode VARCHAR(32),  TimeEnteredDate DATETIME,  HoursWorked DECIMAL(12,2) ) 
INSERT INTO #TimeEntered 
SELECT 'ResourceA','Normal','Project1','Management1','2012-04-30',7.5 
UNION ALL SELECT 'ResourceA','Normal','Project1','Management1','2012-05-01',7.5 
UNION ALL SELECT 'ResourceA','Normal','Project1','Management1','2012-05-02',7.5 
UNION ALL SELECT 'ResourceA','Normal','Project1','Management1','2012-05-03',7.5 
UNION ALL SELECT 'ResourceA','Normal','Project1','Management1','2012-05-04',7.5 
UNION ALL SELECT 'ResourceA','Normal','Project1','Management1','2012-05-07',7.5 
UNION ALL SELECT 'ResourceA','Normal','Project1','Management1','2012-05-08',7.5 

;with ranges as
(
select 
resourcecode 
,TimeTypeCode
,EffectiveDate
,costrate
,row_number() OVER (PARTITION BY resourcecode,timetypecode ORDER BY effectivedate ASC) as row
from #ResourceTimeTypeCost 
)
,ranges2 AS
(
SELECT 
r1.resourcecode 
,r1.TimeTypeCode
,r1.EffectiveDate
,r1.costrate
,r1.effectivedate as start_date
,ISNULL(DATEADD(ms,-3,r2.effectivedate),GETDATE()) as end_date
FROM ranges r1
LEFT OUTER JOIN ranges r2 on r2.row = r1.row + 1 --joins onto the next date row
                    AND r2.resourcecode = r1.resourcecode 
                    AND r2.TimeTypeCode = r1.TimeTypeCode
)
SELECT 
tee.resourcecode
,tee.timetypecode
,tee.projectcode
,tee.activitycode
,SUM(ranges2.costrate * tee.hoursworked) as total_cost
FROM #TimeEntered tee
INNER JOIN ranges2 ON tee.TimeEnteredDate >= ranges2.start_date
                    AND tee.TimeEnteredDate <= ranges2.end_date
                    AND tee.resourcecode = ranges2.resourcecode
                    AND tee.timetypecode = ranges2.TimeTypeCode
GROUP BY tee.resourcecode
,tee.timetypecode
,tee.projectcode
,tee.activitycode
SELECT te.ResourceCode,
       te.TimeTypeCode,
       te.ProjectCode,
       te.ActivityCode,
       te.TimeEnteredDate,
       te.HoursWorked,
       te.HoursWorked * rttc.CostRate Cost
FROM TimeEntered te 
CROSS APPLY
(
  -- First one only
  SELECT top 1 CostRate
    FROM ResourceTimeTypeCost
   WHERE te.ResourceCode = ResourceTimeTypeCost.ResourceCode
     AND te.TimeTypeCode = ResourceTimeTypeCost.TimeTypeCode
     AND te.TimeEnteredDate >= ResourceTimeTypeCost.EffectiveDate
   -- By most recent date
   ORDER BY ResourceTimeTypeCost.EffectiveDate DESC
) rttc
with costs as
    (select c.ResourceCode, c.EffectiveDate as effdate,
            dateadd(day, -1, min(c1.EffectiveDate)) as endDate,
            datediff(day, c.EffectiveDate, c1.EffectiveDate) - 1 as Span
     from ResourceTimeTypeCost c left outer join
          ResourceTimeTypeCost c1
     group by c.ResourceCode, c.EffectiveDate
    )
select te.*, c.CostRate * te.HoursWorked as dayCost
from TimeEntered te join
     Costs c
     on te.ResouceCode = c.ResourceCode and
        te.TimeEntered between c.EffDate and c.EndDate
 with costs as
    (select c.ResourceCode, c.EffectiveDate as effdate,
            dateadd(day, -1, min(c1.EffectiveDate)) as endDate,
            datediff(day, c.EffectiveDate, c1.EffectiveDate) - 1 as Span
     from ResourceTimeTypeCost c left outer join
          ResourceTimeTypeCost c1
     group by c.ResourceCode, c.EffectiveDate
    ),
      te as
    (select te.*, c.CostRate * te.HoursWorked as dayCost
     from TimeEntered te join
          Costs c
          on te.ResouceCode = c.ResourceCode and
             te.TimeEntered between c.EffDate and c.EndDate
    )
select te.ResourceCode, sum(dayCost)
from te
where te.TimeEntered >= <date1> and te.TimeEntered < <date2>