J'ai une table personnalisée avec quelques lignes de répétition, format général: souhaite créer une instruction de mise à jour pour mettre à jour une colonne SEQNO afin de ressembler à: P > Le tableau est déjà rempli et la colonne est créée. p> a essayé d'utiliser un numéro de rangée sur la partition, je pense que cela fournirait une solution, mais avoir des problèmes avec la syntaxe. P> p>
3 Réponses :
a trouvé un bon tutoriel pour utiliser Row_Number () sur (partition de ...) p>
J'ai ajouté la ligne suivante à ma déclaration de sélection utilisée pour remplir la table: p>
Row_Number () sur (partition par ordre d'identification par date) p>
Vous semblez vouloir utiliser une CTE mise à jour avec une fonction de fenêtre:
with toupdate as (
select t.*, row_number() over (order by id, val) as seqnum
from t
)
update toupdate
set seqno = seqnum;
Vérifiez ceci -
IF OBJECT_ID('TEMPDB..#SampleTable') IS NOT NULL
DROP TABLE #SampleTable
Create table #SampleTable
(
ID varchar(5),
Val varchar(10),
SeqNo INT
)
insert into #SampleTable(ID,Val)
values
('ID1','Value'),
('ID1','Value2'),
('ID2','Value3'),
('ID2','Value4')
UPDATE T SET T.SeqNo=A.SeqNo
FROM #SampleTable T INNER JOIN
(
select ID,Val,row_number() over (order by ID,Val) as SeqNo
from #SampleTable
) A ON T.ID=A.ID AND T.Val=A.Val
SELECT * FROM #SampleTable
Pourriez-vous publier l'échantillon de code pour le numéro de ligne sur la partition que vous avez mentionnée, même si la syntaxe est fausse? Si vous modifiez votre question et ajoutez cette information, il sera plus facile de vous aider.