首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取消日期分组的分组

取消日期分组的分组
EN

Stack Overflow用户
提问于 2022-03-05 22:24:50
回答 1查看 63关注 0票数 -1

问题:我有一个为期三年的12个月的时限,以36个财政期间的形式表示。我发现在每个月的最后一天,只提及每个月是最容易的(EOMONTH)。

我有两张桌子要比较。但我的问题是,有一张桌子需要翻译,我看不出该怎么做。

perfect.

  • Table2:
  • Table1:金融类股--已经开始转型--需要转型。difficulty

<<<< 这是我的

从业务角度来看,这些数据表示项目工作。

  • 金融视图准备好了,并告诉我在y期花费了x美元。
  • 活动视图应该告诉我ABC在y期发生的活动。

有了这两张表,我可以很容易地比较句点,并了解正在发生的事情。

这是时间框架的主干,只是为了兴趣

代码语言:javascript
复制
declare @StartDate date = '2021-07-01';
declare @EndDate date = '2024-06-30';

WITH cte AS (
    SELECT @StartDate AS myDate
    UNION ALL
    SELECT DATEADD(MONTH,1,myDate) as myDate
    FROM cte
    WHERE DATEADD(MONTH,1,myDate) <=  @EndDate
)
SELECT EOMONTH(myDate)
FROM cte
OPTION (MAXRECURSION 0)

然后我的数据就像这样

表1-按ProjectID分列的美元,财政期间

代码语言:javascript
复制
ProjectID   FinPeriod   PlannedSpend
AB309       2021-07-31  24087.51
AB302       2021-07-31  2877.5
AB315       2021-07-31  360
AB326       2021-07-31  0
AB331       2021-07-31  720
AB335       2021-07-31  -69325.02
AB454       2021-07-31  18876.8
AB449       2021-07-31  225
AB455       2021-07-31  -24972.1
AB430       2021-07-31  450
AB448       2021-07-31  9825.5

表2-按财政期间分列的活动

代码语言:javascript
复制
ProjectID   PhaseName       FinPeriodStart  FinPeriodFinish
AB315       Closure         2022-06-30      2024-06-30
AB315       Implementation  2022-10-31      2023-07-31
AB315       Investigation   2021-08-31      2022-04-30
AB335       Closure         2020-10-31      2021-09-30
AB335       Design          2020-09-30      2021-03-31
AB448       Closure         2022-03-31      2023-03-31
AB448       Design          2020-02-29      2020-05-31
AB448       Design          2022-04-30      2023-02-28
AB448       Implementation  2022-02-28      2022-05-31

目标是:生产这个。

代码语言:javascript
复制
ProjectID   FinPeriod   Activities
AB315       2022-10-31  Implementation, Closure
AB448       2022-03-31  Closure
AB335       2020-09-30  Design, Clos
AB335       2021-09-30  Closure
AB326       2021-07-31  Design, Implementation, Closure, 
AB331       2021-07-31  xxxxx

我的尝试:

首先,我有一个财政期表,表示3年或36个月或36个财政期间。有趣,但对解决问题并没有真正直接的帮助,直到将布局可视化为止。

其次,我可以使用EOMONTH()函数导出一个阶段开始日期的财政期间和一个阶段结束日期。因此,对ID x项目而言,调查阶段于2021-12-13开始,即2021-12-31财政期,于2022-06-29财政期结束,即2022-06-30财政期。

但我如何“回填”或“翻译”的事实,如果活动X开始于今年1月,结束于12月,那么它一定是发生在所有的12个月之间?我想我问题的关键是我看不出如何改变

代码语言:javascript
复制
AB335       Design          2020-09-30      2021-03-31

转到

代码语言:javascript
复制
AB335       2020-09-30  Design          
AB335       2020-10-31  Design          
AB335       2020-11-30  Design
...
AB335       2021-03-31  Design
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-05 22:52:06

看起来你的解决方案给出了你的CTE,给出了你所需的月份列表。

您可以通过使用apply来使用它来生成您想要的列表,例如:

代码语言:javascript
复制
declare @StartDate date = '20200101', @EndDate date = '20211231';

with cte as (
    select @StartDate as myDate
    union all
    select DateAdd(month,1,myDate) as myDate
    from cte
    where DateAdd(month,1,myDate) <=  @EndDate
), dates as (
    select EOMonth(myDate) mydate
    from cte
), activities as (
  select 'AB335' ProjectId, 'Design' Phasename, Convert(date,'20200930') FinPeriodStart, Convert(date,'20210331') FinPeriodEnd
)
select ProjectId, mydate, Phasename
from activities a
outer apply(
  select mydate from dates
    where mydate >= FinPeriodStart and mydate <= FinPeriodEnd
)md;

只需在适当的范围内使用CTE来满足需求,并在临时表或永久表中创建日期列表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71366364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档