对于单个id
列,我们有序列号01、02、03至99,重复两次/三次。
示例:
ID SEQ_NO
----------
2 01
2 02
2 03
.
.
.
2 99
2 01
2 02
2 99
当第二次在seq_no
上循环时,我们需要将AA
前缀添加到第二次,第三次应该是BB
。
有人能解释一下怎么做吗?
使用ROW_NUMBER
函数尝试以下操作:
如果只想选择SEQ_NO作为新列:
WITH CTE AS
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY ID, SEQ_NO ORDER BY SEQ_NO) rn
FROM table_name
)
SELECT ID, SEQ_NO,
CASE
WHEN rn>1 THEN
CONCAT(CHAR(rn+63), CHAR(rn+63), SEQ_NO)
ELSE SEQ_NO
END AS new_seq
FROM CTE
WHERE rn <= 27
ORDER BY ID, new_seq
如果要更新SEQ_NO列:
WITH CTE AS
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY ID, SEQ_NO ORDER BY SEQ_NO) rn
FROM table_name
)
UPDATE CTE SET SEQ_NO = CONCAT(CHAR(rn+63), CHAR(rn+63), SEQ_NO)
WHERE rn > 1 AND rn <= 27
请看一个带有一组数据的演示,其中seq(01-10(被重复三次。