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

Langage SQL Discussion :

Requête avec variable incrémentée sur changement de clé.


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut Requête avec variable incrémentée sur changement de clé.
    Bonjour,

    Mon problème est simple mais la solution semble l'être moins!

    J'ai une requête en DB2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CLE,SEQ_CLE 
    FROM TABLE
    ORDER BY CLE,SEQ_CLE
    Mon résultat actuel est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CLE  SEQ_CLE
    ----  ----
      1     0
      2     0
      2     1
      3     0
    Ce que je veux c'est une requête avec comme résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CLE  SEQ_CLE GROUPE
    ----  ----   ----
      1     0      0
      2     0      1
      2     1      1
      3     0      2
    Merci à l'avance

  2. #2
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut
    et ton groupe il sort d'ou ???

  3. #3
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    Désolé, j'aurais du spécifier.

    C'est une variable que j'incrémente sur changement de la valeur de nom champ CLE.

  4. #4
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    C'est une façon d'optimiser ma requête.

    En programmation Delphi, j'utilise une GRID et je fais un changement de couleur de ligne sur changement de groupe.
    Au lieu de faire le calcul lors du dessinage de la grille, je veux me faire une variable qui contient déjà le numéro de groupe pour ainsi accélérer l'affichage de la grille.

    SQL est plus rapide!

  5. #5
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Salut,

    Try this :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SQL> SELECT P.cle, P.seq_cle, 
      2         (select count(distinct S.cle) from matable s where s.cle < P.cle) Groupe
      3  FROM maTable P
      4  ORDER BY P.cle;
     
           CLE    SEQ_CLE     GROUPE
    ---------- ---------- ----------
             1          0          0
             2          0          1
             2          1          1
             3          0          2
    P est l'alias de la table de la requête Principale,
    S est l'alias de la table de la Sous-requête.

    Exemple testé sous Oracle 8i

  6. #6
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    Ça fonctionne.
    Par contre, la requête est très lente, ce qui ne m'aide pas dans l'augmentation de la performance.

    Je continu quand même de regarder ta solution.

    Merci

  7. #7
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par souellet
    En programmation Delphi, j'utilise une GRID et je fais un changement de couleur de ligne sur changement de groupe.
    Au lieu de faire le calcul lors du dessinage de la grille, je veux me faire une variable qui contient déjà le numéro de groupe pour ainsi accélérer l'affichage de la grille.
    J'avais zappé ce passage. En fait c'est juste pour "faire joli", je pense qu'il serait plus performant de laisser l'interface graphique faire le boulot, non ?

    Combien de lignes as-tu à traiter dans ton grid ? Et au total dans ta table ? Quelle est la différence de temps de traitement entre la requête sans calcul de groupe et avec ce calcul ?

  8. #8
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    Je me demandais aussi où j'avais fauté.

    Pour essayer de faire une histoire brève...

    Je dois dire que j'ai mis environ 3 ans sur ce projet (donc c'est pas une petite application).

    J'ai une table d'environ 100,000 records.
    La sélection me donne environ 200 lignes.

    Dans ma requête j'ai:
    SELECT de ma table
    4 jointures sur elle-même
    UNION
    SELECT de ma table
    4 jointures sur elle-même

    La requête prend environ 0.4 secondes, l'affichage de la grille environ 2 secondes car j'ai une gestion de couleurs assez complex sur chaque cellules (requête SQL de validation, couleur selon le résultat)
    L'alternance de la couleur des lignes (l'object de mon message) est fonction d'un groupe de ligne et non simplement d'un changement de ligne.

    Ce que j'essai de faire, car SQL est plus performant que ma TwwDBGRID, c'est de transférer des validations dans ma Méga requête.

    Merci de l'intérêt que tu portes à mon problème.

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

Discussions similaires

  1. Requête avec 2 conditions sur deux variables
    Par mensoif dans le forum Langage SQL
    Réponses: 8
    Dernier message: 01/10/2009, 13h50
  2. Une requête avec un Max sur 2 champs
    Par Bils dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/09/2007, 14h04
  3. [SQL & VBA] Requête avec Variable
    Par Altrensa dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/07/2007, 14h31
  4. Réponses: 10
    Dernier message: 11/07/2007, 12h06
  5. Requête avec Group by sur Oracle 8i
    Par madina dans le forum Oracle
    Réponses: 14
    Dernier message: 16/06/2006, 12h41

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