Sql 根据服务日期加入正确的预算日期范围字段
我有两张桌子需要合并。第一个表包含提供服务的日期和该服务的成本。第二个表包括给定时间段内服务的最大预算。以下服务有两个预算,一个从“2012年4月2日”开始,到“2013年4月2日”结束,但在“2014年4月2日”结束的同一天更新。该服务于2013年4月15日实施 因此,我需要附上与服务时间相关的预算:“2013年4月2日”至“2014年4月2日”。由于一个预算在四月份结束,并在四月份在下面的计划中更新,因此两个预算都合并在一起 我需要加入开始日期和结束日期,其中开始日期介于这两个日期之间。Sql 根据服务日期加入正确的预算日期范围字段,sql,sql-server-2008,date,Sql,Sql Server 2008,Date,我有两张桌子需要合并。第一个表包含提供服务的日期和该服务的成本。第二个表包括给定时间段内服务的最大预算。以下服务有两个预算,一个从“2012年4月2日”开始,到“2013年4月2日”结束,但在“2014年4月2日”结束的同一天更新。该服务于2013年4月15日实施 因此,我需要附上与服务时间相关的预算:“2013年4月2日”至“2014年4月2日”。由于一个预算在四月份结束,并在四月份在下面的计划中更新,因此两个预算都合并在一起 我需要加入开始日期和结束日期,其中开始日期介于这两个日期之间。 C
CREATE TABLE #Service_Budget(
ID int,
SERV_Type int,
Start_DT datetime,
End_DT datetime,
Budget int,
NUMBER_OF_MONTHS_OF_SERVICES int
);
INSERT INTO #Service_Budget VALUES
(13946, 5, '4/2/2012', '4/2/2013', 622.4, 12),
(13946, 5, '4/2/2013', '4/2/2014', 788.4, 12)
CREATE TABLE #Service_Visits(
ID int,
Service_Type int,
DOSStart datetime,
BillableUnits int,
RATE_AMOUNT int
);
INSERT INTO #Service_Visits VALUES
(13946, 5, '4/15/2013', 3,75.5)
SELECT
a.ID,
a.Service_Type,
a.DOSStart,
MONTH(a.DOSStart) AS Month,
YEAR(a.DOSStart) AS Year,
MONTH(b.START_DT) AS Start_Month,
YEAR(b.START_DT) AS Start_Year,
b.Start_DT,
b.End_DT,
a.RATE_AMOUNT,
(a.RATE_AMOUNT * a.BillableUnits) as Total,
b.Budget,
b.NUMBER_OF_MONTHS_OF_SERVICES
FROM #Service_Visits as a join #Service_Budget as b
on a.ID=b.ID
这就是我得到的:
ID Service_Type DOSStart Month Year Start_Month Start_Year Start_DT End_DT RATE_AMOUNT Total Budget NUMBER_OF_MONTHS_OF_SERVICES
13946 5 2013-04-15 00:00:00.000 4 2013 4 2012 2012-04-02 00:00:00.000 2013-04-02 00:00:00.000 75 225 622 12
13946 5 2013-04-15 00:00:00.000 4 2013 4 2013 2013-04-02 00:00:00.000 2014-04-02 00:00:00.000 75 225 788 12
请注意,两个预算都已合并,请注意与开始日期相关的预算。您可以使用a.ID=b.ID上的
BETWEEN
子句,以及开始日期和结束日期之间的DOSSTART
。试试这个:
CREATE TABLE #Service_Budget(
ID int,
SERV_Type int,
Start_DT datetime,
End_DT datetime,
Budget int,
NUMBER_OF_MONTHS_OF_SERVICES int
);
INSERT INTO #Service_Budget VALUES
(13946, 5, '4/2/2012', '4/2/2013', 622.4, 12),
(13946, 5, '4/2/2013', '4/2/2014', 788.4, 12)
CREATE TABLE #Service_Visits(
ID int,
Service_Type int,
DOSStart datetime,
BillableUnits int,
RATE_AMOUNT int
);
INSERT INTO #Service_Visits VALUES
(13946, 5, '4/15/2013', 3,75.5)
SELECT
a.ID,
a.Service_Type,
a.DOSStart,
MONTH(a.DOSStart) AS Month,
YEAR(a.DOSStart) AS Year,
MONTH(b.START_DT) AS Start_Month,
YEAR(b.START_DT) AS Start_Year,
b.Start_DT,
b.End_DT,
a.RATE_AMOUNT,
(a.RATE_AMOUNT * a.BillableUnits) as Total,
b.Budget,
b.NUMBER_OF_MONTHS_OF_SERVICES
FROM #Service_Visits as a join #Service_Budget as b
on a.ID=b.ID AND DOSStart BETWEEN Start_DT AND End_DT