我正在尝试为以下给定场景编写一条更新语句。
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;
答案 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;
尚不清楚您要更新哪个表,可以使用上述选择或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);