0

所以我有点迷路,真的不知道如何挂断这个......

考虑到我在 Talend 中有一个 2 DB 表,首先说一个表 invoices_only,它具有字段、invoiceNummer 和这样的作者

在此处输入图像描述

然后,一个带有字段(invoiceNummer、article、数量和价格)的表 invoices_table,对于一张发票,我可以有很多文章,例如

在此处输入图像描述

并通过 tmap 想要获得一张表 invoice_table_result,有新的列,一个为文章位置,一个为总价。对于我知道我可以使用类似 Numeric.sequence("s1",1,1) 函数的位置,但不知道如何在找到新发票编号时重新启动我的计数器,当然还有总价这只是一个基本的乘法

所以我的结果应该是这样的

在此处输入图像描述

这是我的 talend 工作草稿,我在 invoice_only 表和 invoices 之间查找 invoicenummer 在此处输入图像描述

有什么建议吗?谢谢。

4

2 回答 2

2

我使用的一个技巧是执行这样的序列:

Numeric.sequence("s" + row.InvoiceNummer, 1, 1)

这样,当您仍在同一个 InvoiceNummer 上时,序列就会增加,并且只要找到新的 InvoiceNummer,就会开始一个新的序列。

于 2020-06-24T14:36:40.873 回答
0

有两种方法可以实现,

tJavaFlex
Sql

tJavaFlex
您可以将当前数据与之前的数据进行比较,并使用以下函数重置序列值,

if () {      
Numeric.resetSequence(seqName, startValue); 
}

Sql
将数据加载到表中后,创建一个发布作业并使用更新查询来更新记录。您必须选择记录并获取值的排名。在选择之上,您必须执行更新。

select invoicenumber, row_number() over(partition by invoicenumber, order by invoicenumber) from table name where -- conditions if any.

更新语句因数据库而异,请提供您使用的数据库,以便提供更新查询。

我建议你通过 Sql 来实现这一点

于 2020-06-23T13:02:55.330 回答