etl:我们可以聚合动态行数并使用 talend-open-studio 添加 datedynamic

etl : can we aggregate dynamic number of rows and add datedynamic using-talend-open-studio

我是 Talend Open Studio 的初学者,正在尝试进行以下转换。

来自 SQL 服务器 fact_Table,其中包含:

id_facture  produit   mouvment    quantité_Stock    Date 
--------------------------------------------------------------
f1          p1        entrée      +50               28/04/2018
f2          p1        entrée      +10               01/05/2018
f3          p1        sortie      -20               02/05/2018
f3          p2        entrée      +4                02/05/2018
f4          p2        sortie      -1                03/05/2018
f4          p1         entrée     +2                03/05/2018

我想制作这个table:

id_facture  produit   mouvment    quantité_Stock  Date 
-----------------------------------------------------------
f1          p1        entrée      50             28/04/2018
f1          p1        aucune      50             29/04/2018
f1          p1        aucune      50             30/04/2018
f2          p1        entrée      60             01/05/2018
f3          p1        sortie      40             02/05/2018
f3          p2        entrée      4              02/05/2018
f4          p2        sortie      3              03/05/2018
f4          p1        entrée      42             03/05/2018

我想过使用 tAggregateRow,但我发现它不适合我的 issue.how 使用按列分组的滚动总和或累积总和值?

而不是 Talend 这应该在 Sql Server 本身完成,然后您可以检索数据并在 Talend Studio.

中相应地工作

您的场景是根据某些 ID 和日期范围查找 运行 总数的示例。我已经完成了使用 CROSS APPLY 找到 运行 总数的任务,如果您使用的是 Sql 的 2012+ 版本,那么您会有更多选择。为了找出日期范围,我使用了 LEAD,它将根据 id 识别紧邻的下一行。

下面的查询将为您完成工作 -

数据设置:

create table #temp(id_facture nvarchar(100), produit nvarchar(100),  mouvment  nvarchar(100),  quantité_Stock  int,  stockDate date) 
insert into #temp
select 'f1',          'p1',        'entrée',      50,               '04/28/2018' union all
select 'f2',          'p1',        'entrée',      10,               '05/01/2018' union all
select 'f3',          'p1',        'sortie',      -20,               '05/02/2018' union all
select 'f3',          'p2',        'entrée',      4,                '05/02/2018' union all
select 'f4',          'p2',        'sortie',      -1,                '05/03/2018' union all
select 'f4',          'p1',        'entrée',     2,                '05/03/2018'

实际代码:

;WITH CTE1 AS (select
T.id_facture, T.produit,T.mouvment,rt.runningTotal,T.stockDate
from #temp t
 cross apply (select sum(quantité_Stock) as runningTotal
                from #temp
                where produit = t.produit
                and stockDate <= t.stockDate
            ) as rt),
DateList (id_facture,produit,mouvment,runningTotal,stockDate,stockDateEnd)
AS (
SELECT id_facture,produit,mouvment,runningTotal
      , stockDate
      , LEAD(stockDate, 1) OVER ( PARTITION BY produit ORDER BY stockDate ) AS stockDateEnd
    FROM CTE1
UNION ALL
SELECT id_facture,produit,mouvment,runningTotal,DATEADD(DAY,1,stockDate),stockDateEnd FROM DateList
WHERE DATEADD(DAY,1,stockDate) < stockDateEnd
)
SELECT id_facture,produit,mouvment,runningTotal as quantité_Stock,stockDate FROM DateList ORDER BY produit,stockDate