Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/12/2010, 12h31   #1
Candidat au titre de Membre du Club
 
Inscription : juin 2007
Messages : 57
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 57
Points : 10
Points : 10
Par défaut Récupérer l'index de chaque ligne de mon résultat de requête

Bonjour à tous,

J'ai besoin de remonter l'index de chaque ligne de mon résultat de requête...
Je m'explique. Voici ma requête
Code :
1
2
3
4
SELECT [device].[name] AS Equipement, SUM(DATEDIFF(minute, [process].[start_time], [process].[end_time])) AS Durée,
FROM [device], [process]
WHERE [process].[device_db_id] = [device].[db_id]
GROUP BY [device].[name]
Et son résultat
Code :
1
2
3
4
5
Device1	12
Device2	45
Device3	16
Device4	42
Device5	38
Il me faudrait une colonne supplémentaire contenant simplement l'index de la ligne du résultat pour avoir le résultat
Code :
1
2
3
4
5
Device1	12	1
Device2	45	2
Device3	16	3
Device4	42	4
Device5	38	5
J'ai cherché à utiliser ROWGUID mais sans succès... Une idée ?

Cette colonne me permettra d'afficher correctement ma requête sous Delphi.
La base de données est sous SQL Server.

Merci de votre aide
BobaL est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 13h09   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
Bonjour,


utilisez la fonction row_number().

Par contre c'est étrange de vouloir utiliser ce genre de solution sans avoir un classement, je ne comprend pas bien en quoi ca vous aidera à afficher mieux votre requête ?
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 14h16   #3
Candidat au titre de Membre du Club
 
Inscription : juin 2007
Messages : 57
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 57
Points : 10
Points : 10
Merci beaucoup c'est exactement ce qu'il me fallait...
Je ne sais pas comment j'ai pu le rater avec toutes les recherche que j'ai fais sur Google

Je vais l'utiliser pour pouvoir correctement afficher mon résultat dans Delphi. Le composant d'affichage de graphique que j'utilise à besoin d'un valeur numérique pour l'axe X. Pour l'instant je ne pouvais lui passer que la valeur Durée et en label Equipement sauf que du coup le enregistrements ayant la même valeur se superposent...
Maintenant je vais pouvoir donner Y = Duree, X = Number et XLabel = Equipement avec le requête
Code :
1
2
3
4
SELECT [device].[name] AS Equipement, SUM(DATEDIFF(minute, [process].[start_time], [process].[end_time])) AS Durée,  ROW_NUMBER() OVER(ORDER BY [device].[name] ASC) AS Number
FROM [device], [process]
WHERE [process].[device_db_id] = [device].[db_id]
GROUP BY [device].[name]
Merci encore..!
BobaL est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2010, 10h51   #4
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 663
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 663
Points : 8 697
Points : 8 697
Bonjour,

Juste une petite remarque par rapport à la jointure qui est un peu obsolète, et que vous devriez écrire comme suit :

Code :
1
2
3
4
5
6
7
SELECT		device.name AS Equipement
		, SUM(DATEDIFF(minute, P.start_time, P.end_time)) AS Durée
		,  ROW_NUMBER() OVER(ORDER BY D.name ASC) AS Number
FROM		dbo.device AS D
INNER JOIN	dbo.process AS P
			ON P.device_db_id = D.db_id
GROUP BY	D.name
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h05.


 
 
 
 
Partenaires

Hébergement Web