【发布时间】:2023-01-08 02:36:32
【问题描述】:
我有一张这样的桌子。
https://i.stack.imgur.com/XpPZi.png
我需要将每个 ID 和每个阶段的阶段持续时间逐月相加。如果一个阶段在一个月内没有发生,那么在这个月我需要上个月这个阶段的总和,所以每个月都是过去的每个阶段(如果这个阶段存在于当月则+当前月的值).
预期结果
https://i.stack.imgur.com/ukX0I.png
我的问题是,我没有得到当月每个阶段的总和,如果当月没有发生这个阶段,我也不会得到当月的阶段。 有人可以帮帮我吗?
CREATE TABLE [dbo].[Tab_Status_Test](
[ID] [int] NULL,
[Phase] [nvarchar](50) NULL,
[Phase_duration] [int] NULL,
[EOM_Date] [date] NULL
) ON [PRIMARY]
insert into Tab_status_test
(ID ,Phase,Phase_duration, EOM_Date)
values
('1' ,'C' , '22','2021/02/28')
,('1' ,'A' , '13','2021/03/31')
,('1' ,'A' , '5','2021/03/31')
,('1' ,'B' , '2','2021/03/31')
,('1' ,'B' , '19','2021/04/30')
,('1' ,'A' , '3','2021/04/30')
,('1' ,'B' , '1','2021/04/30')
,('1' ,'A' , '3','2021/04/30')
,('1' ,'B' , '22','2021/05/31')
,('1' ,'C' , '22','2021/06/30')
,('1' ,'D' , '20','2021/07/31')
,('1' ,'A' , '2','2021/07/31')
,('2' ,'C' , '22','2021/02/28')
,('2' ,'A' , '13','2021/03/31')
,('2' ,'A' , '5','2021/03/31')
,('3' ,'B' , '2','2021/03/31')
,('3' ,'B' , '19','2021/04/30')
,('2' ,'A' , '3','2021/04/30')
,('3' ,'B' , '1','2021/04/30')
,('2' ,'A' , '3','2021/04/30')
,('2' ,'B' , '22','2021/05/31')
,('3' ,'C' , '22','2021/06/30')
,('3' ,'D' , '20','2021/07/31')
,('3' ,'A' , '2','2021/07/31')
这是我的代码
WITH Sum_Dur
AS
(
SELECT ID
,EOM_Date
,phase
,Phase_duration
,LAG(Phase_duration) OVER (Partition BY phase, eom_date ORDER BY phase,eom_date) as PrevEvent
FROM [CM_PT].[dbo].Tab_Status_Test
)
SELECT *,
SUM(PrevEvent+Phase_duration) AS SummedCount
FROM Sum_Dur
GROUP BY ID
,EOM_Date
,phase
,Phase_duration
, PrevEvent
【问题讨论】:
-
Please do not upload images of code/data/errors when asking a question. T-SQL 也被多种产品使用,例如 SQL Server、Sybase 和 Azure Synapse。您使用什么 (R)DBMS?
-
你能用你需要的预期输出更新你的帖子吗?