2010-07-01 9 views
0

Comment identifier la première ligne ayant une valeur pour chaque marque et catégorie, puis mettre à jour la colonne "FirstValue" avec 1, sinon 0? du tableau prévu par exempleSQL Server - Mettre à jour une colonne si la ligne est le premier enregistrement du groupe

Date | Brands | Category | Value | FirstValue 
Jan 08 | A  | 1  | 0  |0 
Jan 08 | A  | 2  | 0  |0 
Jan 08 | A  | 3  | 0  |0 
Jan 08 | B  | 1  | 12  |1 
Jan 08 | B  | 2  | 0  |0 
Jan 08 | B  | 3  | 0  |0 
Feb 08 | A  | 1  | 5  |1 
Feb 08 | A  | 2  | 0  |0 
Feb 08 | A  | 3  | 67  |1 
Feb 08 | B  | 1  | 0  |0 
Feb 08 | B  | 2  | 0  |0 
Feb 08 | B  | 3  | 6  |1 
+1

est la première date indicative de la première? –

+0

Aussi quelle est la clé primaire pour cette table s'il vous plaît. –

Répondre

2

Common table expressions sont en fait actualisable, et la combinaison avec des fonctions CTEs classement ROW_NUMBER() donne une solution parfaite:

with cte as (
select row_number() over (partition by Brand, Category order by Date) as rn 
, FirstValue 
from Table) 
update cte 
set FirstValue = case when rn = 1 then 1 else 0 end; 
+0

je rencontre une erreur: Syntaxe incorrecte près du mot-clé "Groupe" – marilyn

+0

nous pouvons utiliser group by dans le paramètre? – marilyn

+0

cela fonctionne maintenant. :) pas sûr si c'est parce que j'ai changé de groupe à partitionner. Merci! – marilyn