如何按日期时间为临时表设置自动IDENTITY列
解决方案:按分组生成连续递增序号
你当前的代码用IDENTITY(INT, 1, 2)生成的是全局自增且步长为2的序号,这就是为啥输出里Orderid是1、3、5这类不连续的序列。而你需要的是每个CODE分组内从1开始连续递增的序号,这时候得用窗口函数ROW_NUMBER()来实现,IDENTITY列做不到分组内的序号控制。
修改后的代码
SELECT ROW_NUMBER() OVER(PARTITION BY CODE ORDER BY [DATE], [TIME]) AS Orderid, CODE, [DATE], [TIME] INTO #Temp FROM Table1 ORDER BY CODE, [DATE], [TIME]; SELECT * FROM #Temp;
代码说明
ROW_NUMBER() OVER(PARTITION BY CODE ORDER BY [DATE], [TIME])是核心逻辑:PARTITION BY CODE会把数据按CODE拆分成独立的组,每个组内按照[DATE]和[TIME]排序,然后为每组生成从1开始的连续序号,完全匹配你想要的输出效果。- 对比原来的IDENTITY写法,这个方式能精准控制序号在分组内的递增规则,不会出现跨组的全局自增问题。
内容的提问来源于stack exchange,提问作者Balaji G
相关产品推荐
相关产品推荐

