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

WebDev Discussion :

[WB 16] requête somme sur deux tables


Sujet :

WebDev

  1. #1
    Membre confirmé Avatar de PaulNero
    Homme Profil pro
    DBA Senior Oracle and SQL SERVER
    Inscrit en
    Octobre 2010
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Inde

    Informations professionnelles :
    Activité : DBA Senior Oracle and SQL SERVER
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 416
    Points : 470
    Points
    470
    Par défaut [WB 16] requête somme sur deux tables
    bonjour
    j’ai deux tables

    Table X et TableY reliées comme suit :

    TableX (0, n) -------------(0,1) TableY

    X possède les champs (NumX, Qté Cmdée, Qté livrée, champZ, champT,...) NumX clé primaire
    Y possède les champs (NumY, NumX, Qté Cmdée, Qté livrée,champG,champE,...) NumY clé primaire, NumX clé étrangère.

    Les Qté Cmdée, Qté livrée de X (tableX) doivent être les sommes des Qté Cmdée, Qté livrée de Y (tableY).En effet un même NumX de X peut avoir plusieurs enregistrements de Y (voir pièce jointe).

    1ère piste :
    a=0, b=0;
    pour tout numéro NumX de TableX (je parcours les clé de X)
    si NumX.TableX=NumX.TableY

    // je stock les valeurs courantes dans des réels a et b
    a=a+ Qté Cmdée.TableY
    b=b+ Qté livrée.TableY
    //je stock les valeurs dans la tableX
    TableX.Qté Cmdée=a
    TableX.Qté livrée=b
    Fin si
    Question : comment être sûr que les totaux seront bien ceux venant de la tableY

    2ème piste :
    Je crée une requête :
    Select tableX and TableY
    Where NumX.tableX=NumX.tableY
    Sum()...

    Question: j’ai des vagues idées sur la requête, quelqu’un peut m’orienter à mieux la structurer et affecter le total sur TableX comme en pièce jointe?

    merci
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé Avatar de PaulNero
    Homme Profil pro
    DBA Senior Oracle and SQL SERVER
    Inscrit en
    Octobre 2010
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Inde

    Informations professionnelles :
    Activité : DBA Senior Oracle and SQL SERVER
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 416
    Points : 470
    Points
    470
    Par défaut RE
    après reflexion,
    j'ai décidé de créer une requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Requête={Select sum(qté cmdée) as somme1,sum(qté dépotée) as somme2 from tableY 
    group by tableY.numX}
    normalement il doit m'afficher tous les totaux par numX.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    pour tout ligne de la tableY
        pour tout ligne de table X
             si tableX.numX=tableY.NumX
                  TableX.qté cmdée=Requête.somme1
                  TableX.qté dépotée=Requête.somme2
             fin si
       fin pour
    fin pour
    en executant le test de la requête, webdev me renvoi que la requête est inconnue dans l'annalyse.

    Une idée?

  3. #3
    Membre confirmé Avatar de PaulNero
    Homme Profil pro
    DBA Senior Oracle and SQL SERVER
    Inscrit en
    Octobre 2010
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Inde

    Informations professionnelles :
    Activité : DBA Senior Oracle and SQL SERVER
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 416
    Points : 470
    Points
    470
    Par défaut re
    j'ai finalement reusi à créer la requête qui calcul les sommes des Qté cmdé et dépoté par numX(ici num bon de comande).
    j'ai fait ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT 
        BondeLivraison.NuméroBondeComande AS NuméroBondeComande,
        //Qc,Ql,Qa,Qd quantité commandée,livrée,appelée et dépoté	
    	SUM(BondeLivraison.QuantitéDepotée) AS sommeQd,
    	SUM(BondeLivraison.QuantitéAppelée) AS sommeQa,
    	SUM(BondeLivraison.QuantitéCommandée) AS sommeQc,
    	SUM(BondeLivraison.QuantitéLivrée) AS sommeQl
    FROM 
    	BondeLivraison,
    	BondeComande
    WHERE BondeComande.NuméroBondeComande=BondeLivraison.NuméroBondeComande
     
    GROUP BY 
    	BondeLivraison.NuméroBondeComande

    cela me génère bien mes sommes avec le numX correspondant.J'ai tenté d'implémenter ça comme cela:

    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
    SI HExécuteRequêteSQL(REQ_SommeBL,hRequêteDéfaut)=Faux ALORS
    	Erreur("Erreur d'initialisation de la requête"+RC+HErreurInfo())
    	RETOUR
    FIN
    HLitPremier(REQ_SommeBL)
    TANTQUE PAS HEnDehors()
     
    	// test de l'existence d'un même numéroboncomande dans les deux tables(fichiers) et remplacement du champ spécifié par la somme dans la requête
     
    	SI BondeComande.NuméroBondeComande=BondeLivraison.NuméroBondeComande ALORS
    		BondeComande.QuantitéApelée=REQ_SommeBL.sommeQa
    		BondeComande.QuantitéCommandée=REQ_SommeBL.sommeQc
    		BondeComande.QuantitéDepotée=REQ_SommeBL.sommeQd
    		BondeComande.QuantitéLivrée=REQ_SommeBL.sommeQl
    	FIN
    	HLitSuivant()
    FIN
    HAnnuleDéclaration(REQ_SommeBL)
    Je pense que c'est peut être au niveau du test de l'existence du numérobondecomande que ça bloque.Car il y a un problème d'initialisation de la requête.Quelqu'un voit?

    Devplus

  4. #4
    Membre éprouvé Avatar de miripesage
    Homme Profil pro
    gerant
    Inscrit en
    Novembre 2009
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : gerant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 725
    Points : 1 156
    Points
    1 156
    Par défaut
    SI HExécuteRequêteSQL(REQ_SommeBL,hRequêteDéfaut)=Faux ALORS
    Erreur("Erreur d'initialisation de la requête"+RC+HErreurInfo())
    RETOUR
    FIN
    HLitPremier(REQ_SommeBL)
    TANTQUE PAS HEnDehors()

    // test de l'existence d'un même numéroboncomande dans les deux tables(fichiers) et remplacement du champ spécifié par la somme dans la requête

    SI REQ_SommeBL.NuméroBondeCommande=BondeLivraison.NuméroBondeComande ALORS
    BondeComande.QuantitéApelée=REQ_SommeBL.sommeQa
    BondeComande.QuantitéCommandée=REQ_SommeBL.sommeQc
    BondeComande.QuantitéDepotée=REQ_SommeBL.sommeQd
    BondeComande.QuantitéLivrée=REQ_SommeBL.sommeQl
    FIN
    HLitSuivant()
    FIN
    HAnnuleDéclaration(REQ_SommeBL)

  5. #5
    Membre confirmé Avatar de PaulNero
    Homme Profil pro
    DBA Senior Oracle and SQL SERVER
    Inscrit en
    Octobre 2010
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Inde

    Informations professionnelles :
    Activité : DBA Senior Oracle and SQL SERVER
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 416
    Points : 470
    Points
    470
    Par défaut Re
    Merci à toi Miripesage,
    Mais malheureusement cela ne résout pas mon soucis.En effet, j'ai mis ce code dans la page qui à la tablefichier lier avec bondecomande.La requête SQL en la testant, elle marche bien!! mais dès que je test la page table,il me dit: erreur d'initialisation de la requête, erreur dans le code sql de la requête Mot inattendu.
    Je ne vois pas d'ou cela peut revenir du moment où ma requête fonctionne à merveille.
    Si vous avez d'autres solutions essayer de me les proposer s'il vous plait.

    Merci

  6. #6
    Membre confirmé Avatar de PaulNero
    Homme Profil pro
    DBA Senior Oracle and SQL SERVER
    Inscrit en
    Octobre 2010
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Inde

    Informations professionnelles :
    Activité : DBA Senior Oracle and SQL SERVER
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 416
    Points : 470
    Points
    470
    Par défaut re
    Ca y est j'ai trouvé.
    1-Le problème d'initialisation venait du fait que j'utilisais hexecuterequeSql plutôt que hexecuterequete, après modification tout a bien marché.

    2- pour résumer,j'vais deux tables liées 1 et 2 .Je voulais que les sommes de champs dont les numéros de 2 correspondirent dans 1 fussent affecter à 1.
    Je dois vous avouer que sans la requête Sql, ce problème aurait été très compliqué à faire uniquement à wlangage.
    Voici le code:
    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
     
    SI HExécuteRequête(REQ_SommeBL,hRequêteDéfaut)=Faux ALORS
    	Erreur("Echec requête"+RC+HErreurInfo())
    	RETOUR
    FIN
     
    HLitPremier(REQ_SommeBL)
    TANTQUE PAS HEnDehors()
    	// Traitement sur l'enregistrement de la requête
     
    	POUR TOUTE BondeComande 
     
    			SI REQ_SommeBL.NuméroBondeComande=BondeComande.NuméroBondeComande ALORS
    				// affecte les changement sur la table en cours
    				TABLE_BondeComande.COL_QuantitéApelée=REQ_SommeBL.sommeQa
    				TABLE_BondeComande.COL_QuantitéCommandée=REQ_SommeBL.sommeQc
    				TABLE_BondeComande.COL_QuantitéDepotée=REQ_SommeBL.sommeQd
    				TABLE_BondeComande.COL_QuantitéLivrée=REQ_SommeBL.sommeQl
    				// affecte les changements sur le fichier correspondant
    				BondeComande.QuantitéApelée=REQ_SommeBL.sommeQa
    				BondeComande.QuantitéCommandée=REQ_SommeBL.sommeQc
    				BondeComande.QuantitéDepotée=REQ_SommeBL.sommeQd
    				BondeComande.QuantitéLivrée=REQ_SommeBL.sommeQl
    				HModifie(BondeComande)
    			FIN		
    	FIN
    	// lecture de l'enregistrement suivant
    	HLitSuivant()
    FIN
    HAnnuleDéclaration(REQ_SommeBL)
    Merci à Miripesage qui a ajouté sa pierre à l'édifice

    Paul Nero

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

Discussions similaires

  1. Requête "select" sur deux tables dont une vide
    Par Torgar dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/10/2009, 09h27
  2. requête UNION sur deux tables
    Par cotede2 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 22/05/2009, 10h57
  3. Requête portant sur deux tables et deux champs
    Par OliviaS dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 12/05/2008, 19h37
  4. [Requête] Jointure sur deux tables.
    Par Invité dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/11/2007, 11h36
  5. [SQL] Problème avec script de pagination et requête sql sur deux tables
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/06/2006, 14h06

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