我有一个带有Rownum
标识列的临时表#jobs。
Rownum Jobid Jobname
1 5074 Manager
2 780 Manager
3 71 Employee
4 654 HR
5 94 Employee
6 56 Employee
7 35 Manager
8 81 HR
9 358 Employee
现在,我在“Jobname”栏目中有排序条件
Rownum Jobid Jobname
1 5074 Manager
2 780 Manager
7 35 Manager
8 81 HR
4 654 HR
5 94 Employee
6 56 Employee
9 358 Employee
我的要求是每当我对表格进行排序时,都应重置Rownum
列。根据我的顺序,我需要增加rownum
值。
我试过以下
ALTER TABLE #Jobs DROP COLUMN RowNum //droping identity column from #jobs
SELECT * INTO #tempjob FROM #jobs //inserting #jobs rows into another temp table
TRUNCATE TABLE #Jobs //truncating all rows from #jobs
ALTER TABLE #Jobs ADD RowNum INT //create a new column without increment
//now inserting records from #tempjobs to #jobs with ROW_NUMBER()
INSERT INTO #Jobs
SELECT *,ROW_NUMBER() OVER(ORDER BY Jobname DESC) AS Rownum from #tempjob
我认为这很好,但是当一个临时表中存在大量记录时,我认为使用具有相同数据的另一个临时表并不好。
有没有替代解决方案?
答案 0 :(得分:0)
我建议采用一种更简单的方法。试试这个
CREATE TABLE TEMP AS SELECT * FROM JOBS;
DROP TABLE JOBS;
CREATE TABLE JOBS AS
SELECT ROW_NUMBER() OVER (ORDER BY JOBNAME) ROWNUM,JOBID,JOBNAME FROM TEMP;
当您反复更改表格时,这将是一个开销。 我不是说它的操作效率很高,但它会比你现在所做的更有效率。 请试一试。
答案 1 :(得分:0)
一种简单的方法是简单地更新表格rownum
列
UPDATE #Jobs
SET RowNum= ROW_NUMBER() OVER(ORDER BY Jobname DESC)