0

我有桌子

Project_ID
Start_Date
End_Date
BUDGET_Amount

例如:

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

所以结果是这样的 Proj_ID , START_DATE , END_DATE , AMOUNT

  • "1","2017 年 1 月 1 日","2017 年 1 月 31 日",100 美元
  • "1","2017 年 2 月 1 日","2017 年 2 月 27 日",100 美元
  • "1","2017 年 3 月 1 日","2017 年 3 月 31 日",100$
  • "1","2017 年 4 月 1 日","2017 年 4 月 31 日",100$
  • "1","2017 年 5 月 1 日","2017 年 5 月 31 日",100 美元
  • "1","2017 年 6 月 1 日","2017 年 6 月 31 日",100$
  • "1","2017 年 7 月 1 日","2017 年 7 月 31 日",100$
  • “1”,“2017 年 8 月 1 日”,“2017 年 8 月 31 日”,100 美元
  • "1","2017 年 9 月 1 日","2017 年 9 月 31 日",100$
  • "1","1-OCT-2017","31-OCT-2017",100$
  • "1","2017 年 11 月 1 日","2017 年 11 月 31 日",100 美元
  • "1","2017 年 12 月 1 日","2017 年 12 月 31 日",100 美元
4

1 回答 1

0

使用公用表表达式(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

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

于 2017-08-12T12:19:12.130 回答