IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Récupérer l'index de chaque ligne de mon résultat de requête


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Points : 46
    Points
    46
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    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 ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Points : 46
    Points
    46
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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..!

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    @++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. récupérer l'id d'une ligne de mon gridview.
    Par maXrez dans le forum ASP.NET
    Réponses: 1
    Dernier message: 29/11/2007, 10h46
  2. Réponses: 8
    Dernier message: 18/09/2007, 10h03
  3. Réponses: 22
    Dernier message: 10/02/2007, 12h02
  4. Réponses: 13
    Dernier message: 11/05/2006, 14h15
  5. Récupérer l'index de la ligne d'une TDBLookUpListBox
    Par navis84 dans le forum Bases de données
    Réponses: 2
    Dernier message: 21/02/2005, 10h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo