2013-08-25 14 views
14

Sto tentando di aggiungere una nuova colonna a una tabella esistente, in cui il valore è il numero/riga della riga. Ho bisogno di un modo per generare il numero di riga/valore di classifica, e ho anche bisogno di limitare le righe interessate - in questo caso, la presenza di una sottostringa all'interno di una stringa.Come aggiungere la colonna del numero di riga in SQL Server 2012

In questo momento ho:

UPDATE table 
SET row_id=ROW_NUMBER() OVER (ORDER BY col1 desc) FROM table 
WHERE CHARINDEX('2009',col2) > 0 

e ottengo questo errore:

Windowed functions can only appear in the SELECT or ORDER BY clauses. 

(stesso errore per RANK())

Esiste un modo per creare/aggiornare una colonna con la funzione ROW_NUMBER()? Cordiali saluti, questo è destinato a sostituire una colonna "rank" errata, già esistente.

+0

Puoi includere quali colonne sono nella tua tabella, almeno quelle che hai intenzione di ordinare, cercare e aggiornare? – dcaswell

risposta

24

Si può fare questo con un CTE, qualcosa come:

with cte as 
(
    select * 
    , new_row_id=ROW_NUMBER() OVER (ORDER BY col1 desc) 
    from MyTable 
    where charindex('2009',col2) > 0 
) 
update cte 
set row_id = new_row_id 

SQL Fiddle with demo.

+0

Grazie, ha funzionato dopo aver creato prima row_id. –

-1

soluzione semplice sarebbe quella di creare una tabella temporanea che assomiglia

CREATE TABLE #temp (id int, rango int)

dove ID è dello stesso tipo di chiave primaria in te tabella principale.

Basta usare SELECT INTO per riempire prima tabella temporanea e quindi aggiornare dalla tabella temp ...

1

Se si sta aggiornando solo poche migliaia di righe, si potrebbe provare qualcosa di simile:

select 'UPDATE MyTable SET ID = ' + CAST(RowID as varchar) + ' WHERE ID = ' + CAST(ID as varchar) 
From (
select MyTable, ROW_NUMBER() OVER (ORDER BY SortColumn) RowID from RaceEntry 
where SomeClause and SomeOtherClause 
) tbl 

Copia e incollare i risultati della query nell'editor di query ed eseguire. È un po 'fiacco e un po' yukky funziona.

Problemi correlati