Sybase ASE 16下替代row_number创建唯一列的解决方案问询
Sybase ASE 16 临时表新增唯一标识解决方案
方案1:建表时新增IDENTITY自增列(最推荐)
直接在临时表定义中添加identity属性的列,数据库会自动生成从1开始的连续递增整数,无需手动维护,性能最优:
CREATE TABLE #my_test ( my_id int identity, -- 自增唯一标识列,自动赋值 my_date datetime, my_value float NULL ) go -- 插入数据时无需指定my_id列 INSERT INTO #my_test SELECT '1-Nov-2021',100 INSERT INTO #my_test SELECT '2-Nov-2021',110 INSERT INTO #my_test SELECT '3-Nov-2021',100 INSERT INTO #my_test SELECT '4-Nov-2021',110 INSERT INTO #my_test SELECT '5-Nov-2021',108 INSERT INTO #my_test SELECT '6-Nov-2021',105 go -- 查询直接返回带有序唯一标识的结果 select * from #my_test
方案2:不改表结构,查询时动态生成递增ID
如果临时表已经创建无法修改结构,可通过关联子查询计数生成行号,需选择一组唯一的字段作为排序依据:
select t1.*, (select count(*) from #my_test t2 where t2.my_date <= t1.my_date) as my_id from #my_test t1 order by my_id
若单个字段存在重复值,可组合多个字段保证计数唯一性,示例:where t2.my_date <= t1.my_date and t2.my_value <= t1.my_value
方案3:生成无序唯一值
如果不需要ID有序,直接调用newid()生成全局唯一标识符即可:
select *, newid() as my_unique_id from #my_test
内容的提问来源于stack exchange,提问作者Pythonista anonymous
相关产品推荐
相关产品推荐

