sql - SQL Server 中的字母数字序列

标签 sql sql-server auto-increment sqlcode

对于单个 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/

相关文章:

sql-server - 生成的脚本中的 SQL Server Check/NoCheck 差异

c# - 比较客户端排序和 SQL Server 排序之间的特性

sql-server - jdbc 的 sql server 登录凭据

MySQL AUTO_INCRMENT 不回滚

php - 单击提交按钮时如何增加值

mysql - 即使抛出异常 DUPLICATE KEY 或事务被回滚,auto_increment 值也会递增

SQL/配置单元 : How to calculate days to purchase

mysql - 如何用sql获取按周滚动的数据集

sql - Postgres : average user response time from interaction with a bot

sql - 在批处理结束时检测到不可提交的事务。事务回滚