更新查询重复记录的Oracle

时间:2018-07-05 04:05:09

标签: sql oracle

我正在尝试为以下给定场景编写一条更新语句。

card_no是表的主键,民用号码是数据。

必须使用以下查询更新输出列。

这是我编写的选择查询,用于获取像这样排列的数据。 但是我需要提示更新输出列,如下图所示。

此select语句将仅得出重复的值,该值可以是2倍或更多,因此应基于重复的数目将D字符串附加到具有民用数字的输出上。

不知道从哪里开始,我们将不胜感激。

SELECT LC.CARD_NO,LC.CIVIL_NO
FROM CARD LC
JOIN DUPLICATE_CARD ST2 ON LC.CIVIL_NO=ST2.CIVIL_NO
WHERE  LC.CIVIL_NO IS NOT NULL 
ORDER BY LC.CIVIL_NO; 

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以将count分析函数与LPAD一起使用

SELECT card_no
    ,LPAD('D', count(civil_no) OVER (
            PARTITION BY civil_no ORDER BY card_no
            ), 'D') || civil_no as output
FROM t;

Demo

尚不清楚您要更新哪个表,可以使用上述选择或MERGE INTO

进行相关更新
UPDATE t t1 
SET    output = (SELECT output 
                 FROM   (SELECT card_no, 
                                lpad('D', COUNT(civil_no) 
                                            over ( 
                                              PARTITION BY civil_no 
                                              ORDER BY card_no ), 'D') 
                                || civil_no AS output 
                         FROM   t) t2 
                 WHERE  t1.card_no = t2.card_no);