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

 Firebird Discussion :

recuperation du numero d'ordre d'une ligne d'une selection


Sujet :

Firebird

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2010
    Messages
    843
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2010
    Messages : 843
    Points : 87
    Points
    87
    Par défaut recuperation du numero d'ordre d'une ligne d'une selection
    Bonjour à tous,

    je fait des statistique sur les clients d'une entreprise, et je voudrais qu'a chaque fois quant selectionne un client il donne son classement par rapport au ventes lui correspondant.
    je m'explique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
               select clt, sum(mon) as mon from VEN group by clt
    la j'ai une selection des montant des ventes groupé par client
    et je voudrais recuperer le numéro d'ordre d'une ligne de cette selection qui correspond evidemment à un client donné pour ensuite afficher ce message pour l'utilisateur "Classé N°'+Numero ordre
    merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    12 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 12 999
    Points : 35 363
    Points
    35 363
    Billets dans le blog
    54
    Par défaut
    bonjour,

    au départ j'étais parti sur une solution via une variable de contexte http://www.developpez.net/forums/d68...m/#post3999973

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    WITH V AS  (SELECT clt, sum(mon) AS mon FROM VEN GROUP BY clt)
     
    SELECT
    rdb$get_context('USER_TRANSACTION', 'row#') AS row_number,
    rdb$set_context('USER_TRANSACTION', 'row#',
    COALESCE(cast(rdb$get_context('USER_TRANSACTION', 'row#') AS integer), 0) + 1),clt,mon from v order by mon DESC
    donnera la liste des clients par ordre de montant (du ca le + élevé au ca le -élevé) ainsi que son classement (row_number) . Pratique pour faire des classement style ABC
    attention cependant à remettre la variable de contexte à zéro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT rdb$set_context('USER_TRANSACTION', 'row#', 0) tmp
    FROM RDB$DATABASE;
    il doit y avoir une solution plus simple suivre le lien http://www.firebirdfaq.org/faq343/ et lire la partie sur les "ranks"

    [Edit] la solution , testé sur une SGBD de production contenant 32500 factures
    temps : 0.27 s
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    with C AS (SELECT f.client, sum(f.MNT_USINE) AS montant FROM factures f GROUP BY f.client)
    SELECT
    a.client, a.montant,count(b.client)+1 as rang FROM c a LEFT JOIN c b ON b.MONTANT>a.MONTANT  
    where a.client='3029' 
    GROUP BY 1,2
    correspond à la demande
    je voudrais récupérer le numéro d'ordre d'un client donné
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2010
    Messages
    843
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2010
    Messages : 843
    Points : 87
    Points
    87
    Par défaut
    thanmirth //qui veut dire merci en berbere

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    12 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 12 999
    Points : 35 363
    Points
    35 363
    Billets dans le blog
    54
    Par défaut
    un choukrane aurait suffit ! mais surtout le (que je me suis permis de mettre) et un petit like pour marquer l'appréciation
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/01/2015, 18h30
  2. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. Réponses: 6
    Dernier message: 19/09/2006, 09h03
  5. [VB6]créer une copie d'une ligne d'une table
    Par h82kev dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 01/02/2006, 16h08

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