【问题标题】:Joining the correct budget date range fields based on the date of a service根据服务日期加入正确的预算日期范围字段
【发布时间】:2013-09-09 16:18:02
【问题描述】:

我有两张表需要加入。第一个表包含提供服务的日期和该服务的成本。第二个表包括给定时间段内服务的最大预算。以下服务有两个预算,一个从“2012 年 4 月 2 日”开始,“2013 年 4 月 2 日”结束,但在“2014 年 4 月 2 日”结束的同一天续订。该服务于 2013 年 4 月 15 日进行管理 因此,我需要将与服务时间相关的预算:“2013 年 4 月 2 日”附加到“2014 年 4 月 2 日”。由于一个预算在 4 月结束并在 4 月更新 在下面的计划中,两个预算都被加入。

我需要加入 DOSSTART 介于这两个日期之间的 start_date 和 end_date。

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

注意两个预算是合并的,注意与 DOSSTART 日期相关的预算。

【问题讨论】:

    标签: sql sql-server-2008 date


    【解决方案1】:

    您可以使用 BETWEEN 子句 on a.ID=b.ID AND DOSStart BETWEEN Start_DT AND End_DT 。试试这个:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      • 1970-01-01
      相关资源
      最近更新 更多