Comment countr chaque ligne de select

Je veux extraire datatables de ma table et je veux avoir ce résultat:

1 Valore 2 Valore 3 Valore 4 Valore 

Donc, je veux numéroter chaque ROW de 1 à N.

Ceci est ma requête mais ne fonctionne pas:

  SELECT COUNT(DISTINCT dbo.F_ElementSsortingngFromCodeDescription(RR.ID, RR.DisplayName)) AS Count, dbo.F_ElementSsortingngFromCodeDescription(RR.ID, RR.DisplayName) AS NAME FROM AA_V_PHR_CCD_ResultsObservation R INNER JOIN AA_V_PHR_CCD_ResultsObservationXLanguages RR ON R.ID = RR.ID WHERE CodeSystem = '123456789' GROUP BY dbo.F_ElementSsortingngFromCodeDescription(RR.ID, RR.DisplayName) 

MODIFIER

Ma database est Tsql

et voici mes données d'extrait:

 1 Valore 1 Pippo 1 Pluto 

Au lieu de

 1 Valore 2 Pippo 3 Pluto 

Le count ne change pas par ligne; il y a toujours le même nombre de rangées; ce que vous semblez vouloir n'est pas un count, mais un numéro de rangée.

Pour get un numéro de ligne, vous devez utiliser l'API ROW_NUMBER ; par exemple:

 SELECT ROW_NUMBER() OVER ( ORDER BY dbo.F_ElementSsortingngFromCodeDescription(RR.ID, RR.DisplayName)) as [Position], dbo.F_ElementSsortingngFromCodeDescription(RR.ID, RR.DisplayName) as [Name] ... ORDER BY dbo.F_ElementSsortingngFromCodeDescription(RR.ID, RR.DisplayName) 

Cependant, sauf si vous êtes en train de partitionner (donc en obtenant un numéro de ligne par partition), il serait plus facile de gérer cela sur le client de réception.

Cela devrait faire le travail:

 SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS Count, dbo.F_ElementSsortingngFromCodeDescription(RR.ID, RR.DisplayName) AS NAME FROM AA_V_PHR_CCD_ResultsObservation R INNER JOIN AA_V_PHR_CCD_ResultsObservationXLanguages RR ON R.ID = RR.ID WHERE CodeSystem = '123456789' GROUP BY dbo.F_ElementSsortingngFromCodeDescription(RR.ID, RR.DisplayName) 

Vous pourriez faire en utilisant la fonction rownum. Ce serait spécifique à chaque DB que vous utilisez, mais voici un exemple d'Oracle:

 Select rownum, <ColumnList> from (select <ColumnList> ...) 

La documentation TSQL indique que l'équivalent est la fonction ROW_NUMBER ().

Pour TSQL:

 Select ROW_NUMBER() OVER ([PartitionBy] OrderByClause), <ColumnList>... 

Ceci est ma solution est la plus rapide

 CREATE TABLE Test ( ID INT PRIMARY KEY, VAL VARCHAR(64)); INSERT INTO Test (ID,VAL) VALUES (8,"a"),(156,"b"),(99,"c"); SET @t1=0; SELECT @t1:=@t1 + 1 as 'num', VAL FROM Test; 

EN DEHORS

 num | VAL 1 | a 2 | c 3 | b