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

Requêtes MySQL Discussion :

Comment paramétrer une jointure ?


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Par défaut Comment paramétrer une jointure ?
    Bonjour,

    J'utilise une requête utilisant des jointures :
    (je l'ai simplifiée au maximum)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT
    vt.id_vente,
    vt.date_vente,
    SUM(vtac.acompte_valeur)) AS acpt_encaisse
    FROM tbl_ventes AS vt
    LEFT JOIN tbl_ventes_acomptes AS vtac ON vtac.id_vente=vt.id_vente
    GROUP BY vt.id_vente;
    J'applique différents filtres sur cette requete (période, vendeur,...).
    Je voudrais pouvoir faire la somme acompte_valeur uniquement avec les acomptes dont la date d'encaissement est le même mois que celui de la vente, quelque-soit le filtre appliqué.
    Un magicien aurait-il une solution ?
    Ou dois-je utiliser une autre méthode ?

    D'avance merci pour vos suggestions !

  2. #2
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT vt.id_vente, vt.date_vente,
    SUM(vtac.acompte_valeur)) AS acpt_encaisse
    FROM tbl_ventes AS vt
    LEFT JOIN tbl_ventes_acomptes AS vtac 
    ON vtac.id_vente=vt.id_vente
    AND DATEFORMAT(date_vente,'%Y%m')=DATEFORMAT(date_encssmt,'%Y%m')
    GROUP BY vt.id_vente;
    Tu y étais, presque.
    Bien sûr il te faut remplacer les noms de colonnes de type DATE que j'ai inventés par ceux de colonnes de tes tables.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Par défaut
    Bonsoir Maljuna Kris et merci pour ta réponse.

    Je ne savais pas que l'on pouvait filtrer les jointures aussi simplement !

    Maintenant pour corser un peu voici la requête un peu plus détaillée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT
    vt.id_vente,
    vt.date_vente,
    SUM(vtac.acompte_valeur) AS acpt_encaisse
    SUM(vtac2.acompte_valeur) AS act_encaissable
    FROM tbl_ventes AS vt
    LEFT JOIN tbl_ventes_acomptes AS vtac ON vtac.id_vente=vt.id_vente
    AND DATEFORMAT(date_vente,'%Y%m')=DATEFORMAT(date_encssmt,'%Y%m')
    LEFT JOIN tbl_ventes_acomptes AS vtac2 ON vtac.id_vente=vt.id_vente
    AND DATEFORMAT(date_vente,'%Y%m')<>DATEFORMAT(date_encssmt,'%Y%m')
     
    GROUP BY vt.id_vente;
    1 valeur pour les acomptes du mois, 1 autre pour les autres acomptes.
    Problème
    Si j'ai 1 acompte du mois et 2 acomptes à venir, il me double l'acompte du mois.
    En clair :
    Peut-on faire 2 regroupements dans une même requête ?

    D'avance merci pour vos réponses.
    kri

  4. #4
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Non, là il faut ruser un peu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT vt.id_vente, vt.date_vente,
    SUM(IF(DATEFORMAT(date_vente,'%Y%m') = DATEFORMAT(date_encssmt,'%Y%m'),vtac.acompte_valeur,0)) AS acpt_encaisse,
    SUM(IF(DATEFORMAT(date_vente,'%Y%m') <> DATEFORMAT(date_encssmt,'%Y%m'),vtac.acompte_valeur,0)) AS act_encaissable
    FROM tbl_ventes AS vt
    LEFT JOIN tbl_ventes_acomptes AS vtac ON vtac.id_vente=vt.id_vente
    GROUP BY vt.id_vente;
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Par défaut
    Bonjour,

    Merci beaucoup pour ton aide, mon problème est résolu et j'ai enfin appris à utiliser efficacement une jointure !

    Très cordialement,
    PY

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/05/2006, 18h00
  2. Réponses: 15
    Dernier message: 14/04/2006, 16h34
  3. [ADO.Net] Comment réaliser une jointure bindée ?
    Par prophetky dans le forum Accès aux données
    Réponses: 4
    Dernier message: 18/02/2006, 17h17
  4. Comment faire une jointure ?
    Par Terminator dans le forum Langage SQL
    Réponses: 12
    Dernier message: 16/10/2005, 14h26
  5. Comment optimiser une jointure ?
    Par seb_asm dans le forum Administration
    Réponses: 21
    Dernier message: 25/06/2004, 17h42

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