2010-12-16 5 views
2

ci-dessous est l'exemple que je veux faire:Comment créer rownum dans SQL Server

declare @table table(col1 varchar(10),col2 varchar(10)); 
insert into @table(col1,col2) values ('a1','5340'); 
insert into @table(col1,col2) values ('a1','3340'); 
insert into @table(col1,col2) values ('a1','9185340'); 
insert into @table(col1,col2) values ('b1','1110'); 

Voici une table et des données d'échantillon. Maintenant, comment je veux résultat est comme ci-dessous:

select * from @table 

col1 col2  seq 
a1 5340  1 
a1 3340  2 
a1 9185340 3 
b1 1110  1 

Si vous avez remarqué ici, la SEQ est remis à zéro à nouveau à 1 pour une nouvelle valeur de COL1. Et je ne veux pas changer l'ordre de valeur dans COL2. c'est à dire. la valeur 5340 devrait être 1 et ainsi de suite.

Ceci est juste un exemple de données. Mais les données réelles proviennent d'une autre table, donc les valeurs ne sont pas fixées à seulement 4 lignes.

Toute aide serait appréciée. Merci

+0

Vous souhaitez que la valeur 'seq' soit basée sur l'ordre d'insertion? –

+0

Exactement. Je veux une valeur SEQ basée sur l'insertion. En fait, les données qui ont COL1 = a1 seront insérées de sorte que leur séquence soit 1,2,3. – niceApp

Répondre

4

Il suffit d'utiliser une colonne IDENTITY régulière comme SEQ:

declare @table table(raw_seq int IDENTITY(1,1), col1 varchar(10),col2 varchar(10)); 

puis utilisez

ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY raw_seq) AS seq 

Afin d'obtenir la valeur souhaitée.

+0

Parfait. Ça marche . Merci – niceApp

0

Utilisez la fonction analytique row_number().

select 
    col1, 
    col2, 
    row_number() over (partition by col1 order by col1) seq 
from 
    table 
+0

ROW_NUMBER est une fonction analytique, pas un agrégat - ou vous auriez besoin d'une clause GROUP BY. –

+0

@OMG - true. Aussi, laissé les parens. – Donnie

+0

Cela ne fonctionne pas comme je le souhaite. Parce qu'il commande la valeur dans COL2. Le jeu de résultats que j'ai obtenu de votre déclaration est comme ci-dessous: – niceApp

Questions connexes