对于单个 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
查看demo一组数据,其中 seq (01 - 10) 重复 3 次。
关于sql - SQL Server 中的字母数字序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74219447/