根据开始日期和结束日期每月分配金额
Posted
技术标签:
【中文标题】根据开始日期和结束日期每月分配金额【英文标题】:Distribute amount monthly with respect to start date and end date 【发布时间】:2017-08-12 12:07:39 【问题描述】:我有桌子
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","2017 年 2 月 1 日","2017 年 2 月 27 日",100 美元 "1","1-MAR-2017","31-MAR-2017",100$ "1","1-APR-2017","31-APR-2017",100$ "1","2017 年 5 月 1 日","2017 年 5 月 31 日",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","2017 年 11 月 1 日","2017 年 11 月 31 日",100 美元 "1","1-DEC-2017","31-DEC-2017",100$【问题讨论】:
我删除了不兼容的数据库标签。请标记您真正使用的数据库。 . . Oracle 还是 SQL Server? 【参考方案1】:使用公用表表达式 (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
这将显示月份的第一天和最后一天。
【讨论】:
它需要更加动态 需要更多解释。 PROJECT_ID START_DATE END_DATE REVENUE 30001 4/1/2016 4/1/2018 24,000 30002 4/1/2016 4/1/2018 2000 30003 1/1/2016 1/1/2017 5000跨度> @MohamedFouad,发布格式化数据。可能是截图?获得所需的输出。以上是关于根据开始日期和结束日期每月分配金额的主要内容,如果未能解决你的问题,请参考以下文章