【发布时间】:2016-12-13 17:28:17
【问题描述】:
我必须在同一张表上更新多个具有最大值的列。一个伪查询就像 -
UPDATE PERMIT
SET P_ID = 'FIRST FIVE CHARACTERS WILL REMAIN SAME AND LAST few WILL BE REPLACED BY SELECT Max(prmt_appl_sq) FROM PERMIT SOME CONDITION',
prmt_appl_sq = 'AND NOW UPDATE WITH SAME MAX VALUE USED ABOVE'
WHERE
CONDITION
表格数据就像 P_ID P_APPL_SQ C代码 2016-H-193-5 10 193 列 P_ID 有一个唯一约束,最后一部分 ***-5 实际上是 P_APPL_SQ 中的值,每次使用相同的其他三个值创建记录时都会递增。 例如,当创建具有 2016 年的新记录并键入 -H 和 Center 193 时,P_ID 将变为 ********-6。我必须将 CCode = 193 的所有记录更新为 195,并将 p_ID 更新为 2016-H-195-“前三个组合的最大值 +1”,然后还更新 P_APPL_SQ 具有相同的值。
我提出了查询,但它尝试在每一行上添加相同的值,从而引发唯一约束违规
更新 OSPDBA.OSPT001_PRMT_APPL
SET rted_to_org_cd = '55014040191',
PRMT_ID = SUBSTR(PRMT_ID, 0, 11) || (选择最大值(prmt_appl_sq)+ 1 FROM
OSPDBA.OSPT001_PRMT_APPL 其中 rted_to_org_cd = '55014040191' 和 prmt_sbmt_yr
= 2016 和 prmt_typ_cd = 'H'),
prmt_appl_sq = ((SELECT Max(prmt_appl_sq) + 1 FROM OSPDBA.OSPT001_PRMT_APPL
其中 rted_to_org_cd = '55014040191' 和 prmt_sbmt_yr = 2016 和 prmt_typ_cd =
'H'))
在哪里
rted_to_org_cd IN ('55014040193','55014040195') 和 prmt_sbmt_yr = 2016;
我们如何才能为每条记录设置唯一的最大值?
【问题讨论】:
-
大多数此类问题都可以通过一条 SQL 语句解决。主要要求是问题陈述在逻辑上是一致的。 (否则问题无法通过任何方式解决。)但是,为了获得更多帮助,您需要提供表结构(列名和数据类型,仅针对问题所需的列),一些示例数据说明所有可能的并发症和特殊情况,以及期望的输出。
-
这是definitely possible;你试过谷歌搜索吗?此外,当有句法疑问时,reading Oracle's SQL reference 通常是个好主意。