-1

RownumID 列を持つ一時テーブル #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

これは良いと思いましたが、大量のレコードが 1 つの一時テーブルにある場合、同じデータを持つ別の一時テーブルを使用するのは良くないと思います。

これに対する代替ソリューションはありますか?

4

2 に答える 2

0

rownum非常に簡単な方法は、テーブルの列を単純に更新することです

UPDATE #Jobs
SET RowNum= ROW_NUMBER() OVER(ORDER BY Jobname DESC)
于 2016-04-13T10:28:48.613 に答える
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 に答える