每月就开始日期和结束日期分配金额

我有桌子

Project_ID
Start_Date
End_Date
BUDGET_Amount

例如:

我需要用SQL返回12行每行表示两个日期和预算值之间的月份年= 1200 /两个日期之间的月份数“12”= 100 $

所以结果就像这个Proj_ID,START_DATE,END_DATE,AMOUNT

  • “1”, “1-JAN-2017”, “31-JAN-2017”,100 $
  • “1”, “1-FEB-2017”, “27-FEB-2017”,$ 100米
  • “1”, “1-MAR-2017”, “31-MAR-2017”,100 $
  • “1”, “1-APR-2017”, “31-APR-2017”,100 $
  • “1”, “1-MAY-2017”, “31-MAY-2017”,100 $
  • “1”, “1-JUN-2017”, “31-JUN-2017”,100 $
  • “1”, “1-JUL-2017”, “31-JUL-2017”,100 $
  • “1”, “1-AUG-2017”, “31-AUG-2017”,100 $
  • “1”, “1-SEP-2017”, “31-SEP-2017”,100 $
  • “1”, “1-OCT-2017”, “31-OCT-2017”,100 $
  • “1”, “1-NOV-2017”, “31-NOV-2017”,100 $
  • “1”, “1-DEC-2017”, “31-DEC-2017”,100 $

  • 使用通用表达式(CTE),您可以生成给定范围内的日期。 这将生成您需要的输出:

    ;with mycte as
         (
        select cast('1 jan 2017' as datetime) as DateValue
        union all
        select DATEADD(MONTH,1, DateValue)
        from    mycte  
        where   DATEADD(MONTH,1, DateValue) <= '31 dec 2017'
        )
    
       select 
       1 Proj_ID,
       REPLACE(CONVERT(VARCHAR(11), DateValue, 106), ' ', '-')  START_DATE ,
       REPLACE(CONVERT(VARCHAR(11), DATEADD(DAY, -1, DATEADD(MONTH,1, DateValue))), ' ', '-')   END_DATE  ,
       '100$' AMOUNT
       from    mycte
    

    这将显示几个月的第一天和最后几天。

    链接地址: http://www.djcxy.com/p/65619.html

    上一篇: Distribute amount monthly with respect to start date and end date

    下一篇: Grouping per month