通过存储过程的方式
可以参考这个写存储过程:https://blog.csdn.net/weixin_44740485/article/details/120995693
用窗口函数呗,序号列应该是自动生成的,而不是在你原有的基础上修改,所以只需要有id和tet列即可
用存储过程吧
先按照id排序再去计算新的序列号去添加
表名: test
字段: id,content
select * from
(SELECT id,content,DENSE_RANK() OVER( ORDER BY content asc ) as no FROM test ) t order by t.id,t.no asc
--创建一个临时表存储图中表格内容
WITH temp_table AS (
SELECT 1 AS id, 'a' AS txt FROM dual
UNION ALL
SELECT 2 AS id, 'a' AS txt FROM dual
UNION ALL
SELECT 3 AS id, 'b' AS txt FROM dual
UNION ALL
SELECT 4 AS id, 'c' AS txt FROM dual
UNION ALL
SELECT 5 AS id, 'c' AS txt FROM dual
UNION ALL
SELECT 6 AS id, 'd' AS txt FROM dual
)
--使用DENSE_RANK()函数按照txt列进行排序,并按照id列进行分组,计算序号列
SELECT id, txt, DENSE_RANK() OVER (PARTITION BY id ORDER BY txt) AS 序号
FROM temp_table;
执行上述代码后,得到以下结果:
--创建一个临时表存储图中表格内容
WITH temp_table AS (
SELECT 1 AS id, 'a' AS txt FROM dual
UNION ALL
SELECT 2 AS id, 'a' AS txt FROM dual
UNION ALL
SELECT 3 AS id, 'b' AS txt FROM dual
UNION ALL
SELECT 4 AS id, 'c' AS txt FROM dual
UNION ALL
SELECT 5 AS id, 'c' AS txt FROM dual
UNION ALL
SELECT 6 AS id, 'd' AS txt FROM dual
)
--使用DENSE_RANK()函数按照txt列进行排序,计算序号列
SELECT id, txt, DENSE_RANK() OVER (ORDER BY txt) AS 序号
FROM temp_table;
【以下回答由 GPT 生成】
对于这个问题,可以使用Oracle的窗口函数和递归子查询来实现。下面是一个使用SQL语句解决这个问题的示例:
WITH sorted_rows AS (
SELECT ID, 列1, 列2, 列3,
ROW_NUMBER() OVER (ORDER BY ID) AS 序号
FROM 表名
), numbered_rows AS (
SELECT ID, 列1, 列2, 列3,
CASE
WHEN 列1 = lag(列1) OVER (ORDER BY ID) THEN lag(序号) OVER (ORDER BY ID)
ELSE lag(序号) OVER (ORDER BY ID) + 1
END AS 序号
FROM sorted_rows
)
SELECT ID, 列1, 列2, 列3, 序号
FROM numbered_rows
ORDER BY ID;
在这个SQL语句中,首先使用ROW_NUMBER()
函数为每一行生成一个初始序号,并按照ID列进行排序。然后,使用lag()
函数来比较当前行的列1与前一行的列1是否相同,根据条件生成新的序号。最后,通过查询结果的ID列进行排序并返回结果。
请替换上述示例中的表名为实际的表名,并将列1,列2,列3等替换为实际的列名。
【相关推荐】
oracle 中有提供窗口函数 partition by 可以看看语法怎么使用。
使用row_number()函数计算每一条记录的序号,然后根据txt字段的值来判断序号是否相同或递增
我查了这篇文章应该能解决你的问题,https://blog.csdn.net/y2020520/article/details/128535818
先按照id排序再去计算新的序列号去添加
这种排序可以是用Oracle得开窗函数,dense_rank()考虑重复值
select a.*,dense_rank() over(order by txt) from 表名 a;
你的需求4楼的已经满足了吧。如果按照你后面评论里面说的,如果再次出现aa,需要重新分组的话,那么使用基本的sql实现不了,可以考虑建一个存储过程来实现
参考gpt
要通过 Oracle 实现表格内容的序号排序,您可以使用 Oracle SQL 中的窗口函数和排序功能。以下是一个示例查询,可以根据您的描述对表格进行排序并分配序号:
SELECT
id,
column1,
column2,
ROW_NUMBER() OVER (ORDER BY id) AS sequence_number
FROM
your_table
ORDER BY
id;
在上面的查询中,your_table
是您的表格名称,id
是用于排序的列名,column1
、column2
是您要比较的列名。ROW_NUMBER() OVER (ORDER BY id)
是窗口函数,它将根据 id
列的值为每一行分配一个序号。
请注意,上述查询仅提供了基本的排序功能,根据您的需求,您可能需要根据实际情况进行适当的修改。