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

SQL Firebird Discussion :

Utilisation de lignes dans un résultat


Sujet :

SQL Firebird

  1. #1
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut Utilisation de lignes dans un résultat
    Salut

    j'ai le code suivant qui rend le bon résultat attendu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select tb_step.nom_step,
        tb_point_prlv.designation_ouvrage,
        tb_matiere_seche.mat_seche from tb_step
     
    inner join tb_matiere_seche on (tb_matiere_seche.code_step = tb_step.code_step)
    inner join tb_point_prlv on (tb_point_prlv.code_point_prlv = tb_matiere_seche.code_point_prlv)
     
    where (tb_matiere_seche.date_bilan between :d_debut and :d_fin
    and tb_matiere_seche.code_point_prlv in (3,4))
    comme résultat, pour la date du 30/09/2012 que je prends comme exemple, j'ai 4 lignes. A présent, je dois utiliser le résultats des lignes 1 et 2 dans une expression telle que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Ratio = val_ligne1_champ3/(val_ligne2_champ3-val_ligne1_champ3)
    le problème c'est que je dois prendre les valeurs des lignes qui se succèdent mais pas de la même ligne (ligne 1 et 2, 3 et 4 ....)

    j'ai pensé à inclure un for each mais j'ai pas su où mettre ce bout de code ?!
    je pense que je dois prendre le résultat de la requête et travailler dessus mais j'ai aucune idée sur la méthode à suivre.

    merci par avance.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  2. #2
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut Résolution par CTE
    Salut !
    en cherchant par ici et là, j'ai finis par tombé sur un vieux tutoriel Requêtes récursives avec les CTE - Exemples avec SQLServer 2003
    qui m'a vraiment beaucoup aidé à revoir la solution d'un autre œil. A vrai dire, j'aurais dû penser à la récursivité mais comme j'ai jamais songé qu'il y'avait moyen de l'utiliser dans du SQL j'ai omis cette piste par ignorance.

    J'ai pas encore validé le résultat final mais j'aimerais quand même partager ce code SQL avec vous, je souhaiterais l'optimiser ou l'améliorer, merci encore les amis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    /* Utilisation d'une CTE (expression de table commune) */
    with
        /* calcul de la moyenne de l'indice de boue dans le bassin d'aération */
        Compte_Moyenne_IB_BA (step, ouvrage, moy_ib)
        as
            (select b.nom_step, c.designation_ouvrage, avg(a.indice_boue)
            from tb_indice_boue a
                inner join tb_step b on (b.code_step = a.code_step)
                inner join tb_point_prlv c on (c.code_point_prlv = a.code_point_prlv)
            where ( (a.date_bilan between :d_debut and :d_fin) and
                    c.code_point_prlv = 3 /* code bassin d'aération */)
            group by b.nom_step, c.designation_ouvrage
            ),
     
        /* calcul de la moyenne de l'indice de boue dans le clarificateur */
        Compte_Moyenne_IB_CL (step, ouvrage, moy_cl)
        as
            (select b.nom_step, c.designation_ouvrage, avg(a.indice_boue)
            from tb_indice_boue a
                inner join tb_step b on (b.code_step = a.code_step)
                inner join tb_point_prlv c on (c.code_point_prlv = a.code_point_prlv)
            where ( (a.date_bilan between :d_debut and :d_fin) and
                    c.code_point_prlv = 8 /* code clarificateur */)
            group by b.nom_step, c.designation_ouvrage
            )
     
    select  /* affichage du nom de la STEP */
            Compte_Moyenne_IB_BA.step,
            /* affichage du Ratio */
            (cast(Compte_Moyenne_IB_BA.moy_ib as float)/Compte_Moyenne_IB_CL.moy_cl) Ratio_IB
    from Compte_Moyenne_IB_CL, Compte_Moyenne_IB_BA
    where ( Compte_Moyenne_IB_BA.STEP  = Compte_Moyenne_IB_CL.STEP )
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  3. #3
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    sauf que cela n'a rien de récursif
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  4. #4
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Citation Envoyé par makowski Voir le message
    sauf que cela n'a rien de récursif
    Salut

    exact, fallait juste préciser que j'ai rééditer le terme tel quel de l'article cité, sinon je n'ai fais qu'utilisé la CTE
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

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

Discussions similaires

  1. Sélection de ligne dans des résultats
    Par jeff_68 dans le forum Requêtes
    Réponses: 1
    Dernier message: 29/12/2010, 11h35
  2. Saut de ligne dans un résultat de requête
    Par Firndin dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 01/12/2008, 14h37
  3. générer des n° de lignes dans le résultat d'une requête
    Par karimspace dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 13/09/2007, 20h33
  4. Utiliser une ligne de commande dans mon programme.
    Par Someonelse dans le forum MFC
    Réponses: 3
    Dernier message: 20/06/2006, 16h11
  5. Lignes en double dans le résultat d'une jointure
    Par ledevelopeur dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/06/2004, 18h10

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