【发布时间】:2015-03-26 19:09:13
【问题描述】:
我有 2 行:
- 第 1 行 (LN_DISB_SEQ_NBR = 3) 此行有我需要的字段数据
- 第 2 行 (max(LN_DISB_SEQ_NBR) = 6) 此行包含我要更新的字段
我所拥有的示例(不是完整的表格):
LN_DISB_SEQ_NBR | EMPLID | DNT_CHNG_THS | LN_ACTION_DT | TRNSFR_BATCH | more...
----------------+---------+--------------+--------------+--------------+--------
3 | 1234567 | abc | 13-JAN-2015 | TB3399999203 |
6 | 1234567 | xyz | 14-JAN-2015 | TB4820000000 |
我希望更新的示例:
LN_DISB_SEQ_NBR | EMPLID | DNT_CHNG_THS | LN_ACTION_DT | TRNSFR_BATCH | more...
----------------+---------+--------------+--------------+--------------+--------
3 | 1234567 | abc | 13-JAN-2015 | TB3399999203 |
6 | 1234567 | xyz | 13-JAN-2015 | TB3399999203 |
这是我看到的问题:现在,我的 SQL 工作正常,但我对它的构造方式不满意。如果我想添加更多字段进行更改,它的大小将继续增长,并且越来越难以维护(必须更改许多字段)。
我怎样才能重写/压缩它,让它执行相同的任务,但更高效、更干净?
update PS_AG_LOAN_DISB_ACTN3 t1
set t1.LN_ACTION_STATUS = 'B',
t1.LN_ACTION_DT = (select LN_ACTION_DT
from PS_AG_LOAN_DISB_ACTN3
where EMPLID = '1234567'
and ITEM_TYPE = '913000300110'
and LN_DISB_SEQ_NBR = 3),
t1.TRNSFR_BATCH = (select TRNSFR_BATCH
from PS_AG_LOAN_DISB_ACTN3
where EMPLID = '1234567'
and ITEM_TYPE = '913000300110'
and LN_DISB_SEQ_NBR = 3
where t1.EMPLID = '1234567'
and t1.LN_DISB_SEQ_NBR = (select max(LN_DISB_SEQ_NBR)
from PS_AG_LOAN_DISB_ACTN3
where EMPLID = '1234567'
and ITEM_TYPE = '913000300110'
and LN_ACTION_STATUS = 'R');
【问题讨论】:
-
您打算将哪个字段更新到其他字段?并取决于什么领域? emplid 不会像您上面的表格那样显示。
-
@EkoJunaidiSalam 我现在期待更新
LN_ACTION_DT和TRNSFR_BATCH。但未来计划添加更多字段。 -
看来你要使用
merge。 -
不,我想如果你使用流水线函数来更新它会更有效,对吧?