Précédent   Forum du club des développeurs et IT Pro > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 31/10/2012, 12h16   #1
Just-Soft
Membre Expert
 
Homme AbdelHakim Kellouche
Inscription : mai 2008
Messages : 2 048
Détails du profil
Informations personnelles :
Nom : Homme AbdelHakim Kellouche
Localisation : Algérie

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : mai 2008
Messages : 2 048
Points : 2 148
Points : 2 148
Envoyer un message via MSN à Just-Soft Envoyer un message via Skype™ à Just-Soft
Par défaut Utilisation de lignes dans un résultat

Salut

j'ai le code suivant qui rend le bon résultat attendu :
Code :
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 :
(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)
Just-Soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2012, 04h57   #2
Just-Soft
Membre Expert
 
Homme AbdelHakim Kellouche
Inscription : mai 2008
Messages : 2 048
Détails du profil
Informations personnelles :
Nom : Homme AbdelHakim Kellouche
Localisation : Algérie

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : mai 2008
Messages : 2 048
Points : 2 148
Points : 2 148
Envoyer un message via MSN à Just-Soft Envoyer un message via Skype™ à Just-Soft
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 :
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)
Just-Soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2012, 10h01   #3
makowski
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 255
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

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

Informations forums :
Inscription : mai 2002
Messages : 2 255
Points : 3 575
Points : 3 575
sauf que cela n'a rien de récursif
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2012, 20h50   #4
Just-Soft
Membre Expert
 
Homme AbdelHakim Kellouche
Inscription : mai 2008
Messages : 2 048
Détails du profil
Informations personnelles :
Nom : Homme AbdelHakim Kellouche
Localisation : Algérie

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : mai 2008
Messages : 2 048
Points : 2 148
Points : 2 148
Envoyer un message via MSN à Just-Soft Envoyer un message via Skype™ à Just-Soft
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)
Just-Soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 21h42.


 
 
 
 
Partenaires

Hébergement Web