我有一个要求,我们需要创建相同的一组行,等于表中已经存在的行数,然后更新金额。基本上,我们希望在able中创建两组相同的行,其中唯一的区别是正数和负数,类似于下表。我需要为表中已经存在的每个正数行生成负数行。
这就是最终产品应该是什么样子:
我如何才能做到这一点?当前表中只有正数行。在上面的示例图像中,我尝试基于奇数和偶数行ID进行验证,但这也意味着首先使用偶数更新预先存在的正数行,然后将行ID递增为负数。但这对我也不起作用。
请告知实现这一目标的最佳方式。下面是示例数据
注意,表中只有正数行,我们需要添加负数行。对于每个正金额行,必须为相同金额创建负金额行
CREATE TABLE XXRR_LINE_STG
( DOCUMENT_ID NUMBER,
LINE_ID NUMBER,
LINE_VALUE NUMBER
) ;
REM INSERTING into PROCORE_WH_DATA.XXRR_LINE_STG
SET DEFINE OFF;
Insert into XXRR_LINE_STG (DOCUMENT_ID,LINE_ID,LINE_VALUE) values (543210,1,211.75);
Insert into XXRR_LINE_STG (DOCUMENT_ID,LINE_ID,LINE_VALUE) values (543210,2,311.75);
Insert into XXRR_LINE_STG (DOCUMENT_ID,LINE_ID,LINE_VALUE) values (543210,3,411.75);
救命啊!!
感谢Darsh
2条答案
按热度按时间hgtggwj01#
你可以做一些像UNION ALL这样简单的操作来添加新行,然后重构行id:
或者更紧凑一点(也更难理解一点),创建一个连接到伪行的额外行:
mdfafbf12#
如果你想在表中插入新数据,可以使用
MERGE
语句:然后在
MERGE
之后,您的表将包含:| 文件ID| LINE_ID|线值|
| --|--|--|
| 543210 | 1 |二百一十一点七五|
| 543210 | 1 | -211.75 |
| 543210 | 2 |三百一十一点七五|
| 543210 | 2 | -311.75 |
| 543210 | 3 |四百一十一点七五|
| 543210 | 3 | -411.75 |
如果你然后
INSERT
一个新的行到表中,并希望添加缺失的负值,那么你可以再次运行MERGE
语句,它将只INSERT
缺失的负值。如果表中的值可以更改,并且您希望重新同步正数和负数,则可以使用:用途:
fiddle