-1

我有一个带有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    

现在我在“职位名称”列上有排序条件

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

我认为这很好,但是当一个临时表中有大量记录时,我认为使用另一个具有相同数据的临时表不好。

有没有其他解决方案?

4

2 回答 2

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;

当您反复更改表时,这将是一个开销。我并不是说它的操作效率很高,但它会比你现在做的更有效率。请试一试。

于 2013-07-05T10:03:42.307 回答
0

一个非常简单的方法是简单地更新表的rownum

UPDATE #Jobs
SET RowNum= ROW_NUMBER() OVER(ORDER BY Jobname DESC)
于 2016-04-13T10:28:48.613 回答