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 :

full outer join


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    246
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 246
    Par défaut full outer join
    bonjour, je dois ecrire une requete qui va chercher des cumul de ventes dans une table, ainsi que les cumul de l'année passé, regroupé par reference article et par mois.
    Ma requete fonctionne tant que des ventes sont présente et dans le mois de l'année N et dans le mois de l'année n-1.

    j'aimerais que dans des cas ou il n'y a pas eu de vente dans le mois de l'année N ou dans le mois ou de l'année N-1 il affiche quand meme les données qu'il possede (je sais pas si je suis tres clair..)
    j'ai pensé a mettre un full outer join mais sans succès.

    voici ce que j'ai ecris :
    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
    Select  t_cumulca.mois,t_cumulca.cumulqte,
     t_cumulca.cumulht, sum(t_cumulca.cumulqte) as cumulqant,
     sum(t_cumulca.cumulht) as cumulchif, 
    anpass.cumulqte, anpass.cumulht,
     sum(anpass.cumulqte) as sumteanpass,
     sum(anpass.cumulht) as sumanpasscumulht
     
     from t_cumulca full outer join t_cumulca as anpass on 
    (t_cumulca.refarticle =  anpass.refarticle and
     t_cumulca.mois = anpass.mois)
     
     where t_cumulca.refarticle = '10204040' 
     and t_cumulca.annee = 2009 and
     anpass.annee = 2008
     
     group by   t_cumulca.mois, t_cumulca.cumulqte, 
    t_cumulca.cumulht, anpass.cumulqte,
     anpass.cumulht

  2. #2
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut

    Un LEFT OUTER JOIN devrait faire l'affaire. Essaye 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    SELECT
      T_CUMULCA.MOIS,
      T_CUMULCA.CUMULQTE,
      T_CUMULCA.CUMULHT,
      SUM(T_CUMULCA.CUMULQTE) AS CUMULQANT,
      SUM(T_CUMULCA.CUMULHT) AS CUMULCHIF,
      ANPASS.CUMULQTE,
      ANPASS.CUMULHT,
      SUM(COALESCE(ANPASS.CUMULQTE, 0)) AS SUMTEANPASS,
      SUM(COALESCE(ANPASS.CUMULHT, 0)) AS SUMANPASSCUMULHT
    FROM
      T_CUMULCA LEFT OUTER JOIN T_CUMULCA AS ANPASS
      ON
        T_CUMULCA.REFARTICLE =  ANPASS.REFARTICLE AND
        T_CUMULCA.MOIS = ANPASS.MOIS
    WHERE
      T_CUMULCA.REFARTICLE = '10204040' AND
      T_CUMULCA.ANNEE = 2009 AND
      ANPASS.ANNEE = 2008
    GROUP BY
      T_CUMULCA.MOIS,
      T_CUMULCA.CUMULQTE,
      T_CUMULCA.CUMULHT,
      ANPASS.CUMULQTE,
      ANPASS.CUMULHT
    @+ Claudius

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    246
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 246
    Par défaut
    hélas cela ne me renvoi aucun résultat.

    pour faire mon test je rentre des entrés pour un produit en octobre 2009 et d'autre en décembre 2008

    j'aimerais que la requête me renvoie les entrées avec
    pour octobre 2009 les valeur de l'année et vide pour l'année précédente

    et décembre vide pour l'année en cours et les données pour 2008.

    voici ma table :

    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
    33
    /******************************************************************************/
    /*            Generated by IBExpert 2009.06.15 15/12/2009 18:06:16            */
    /******************************************************************************/
     
    SET SQL DIALECT 3;
     
    SET NAMES NONE;
     
    SET CLIENTLIB 'C:\Program Files\Firebird\Firebird_2_1\bin\fbclient.dll';
     
    CONNECT '';
     
     
     
    /******************************************************************************/
    /*                                   Tables                                   */
    /******************************************************************************/
     
     
     
    CREATE TABLE T_CUMULCA (
        REFARTICLE   VARCHAR(15),
        TAILLE       VARCHAR(2),
        CUMULQTE     NUMERIC(12,2),
        CUMULHT      NUMERIC(12,2),
        MOIS         VARCHAR(2) NOT NULL,
        ANNEE        VARCHAR(4),
        STKMINIFINI  INTEGER,
        STKMINIBRUT  INTEGER
    );
     
     
    COMMIT WORK;
    je n'ai encore mis aucune cléf de type autonum, peu etre est ce mon defaut à ce stade.

  4. #4
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Oups je n'avais pas remarqué que tu faisais une jointure sur la même table.

    Puisque tu es sous IBExpert que tu peux m'extraire un jeu de données exemple, que je puisse faire quelques tests. Peu de lignes suffiront.

    @+

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    246
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 246
    Par défaut
    voila ce que j'ai pour mon test :
    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
    /******************************************************************************/
    /*            Generated by IBExpert 2009.06.15 15/12/2009 18:17:32            */
    /******************************************************************************/
     
    SET SQL DIALECT 3;
     
    SET NAMES NONE;
     
    SET CLIENTLIB 'C:\Program Files\Firebird\Firebird_2_1\bin\fbclient.dll';
     
    CONNECT '';
     
    INSERT INTO T_CUMULCA (REFARTICLE, TAILLE, CUMULQTE, CUMULHT, MOIS, ANNEE, STKMINIFINI, STKMINIBRUT) VALUES ('10204040', NULL, 12, 18.48, '12', '2008', 0, 0);
    INSERT INTO T_CUMULCA (REFARTICLE, TAILLE, CUMULQTE, CUMULHT, MOIS, ANNEE, STKMINIFINI, STKMINIBRUT) VALUES ('10204040', NULL, 6, 9.24, '10', '2009', 0, 0);
    INSERT INTO T_CUMULCA (REFARTICLE, TAILLE, CUMULQTE, CUMULHT, MOIS, ANNEE, STKMINIFINI, STKMINIBRUT) VALUES ('10204045', NULL, 6, 10.62, '10', '2009', NULL, NULL);
     
    COMMIT WORK;
     
    COMMIT WORK;

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 596
    Billets dans le blog
    65
    Par défaut
    Sauf par procedure , je ne vois pas vraiment comment on pourrait trouver des mois inexistants !

    Pourtant il me semble avoir vu quelque chose de ce genre dans un des tutos de SQLPro , si je le retrouve je mets le lien

    [Edit] j'avais bien vu , Alzheimer est encore loin , Il m'aura fallu moins de 5Mn pour retrouver le topic , le chapitre 3.3 doit pouvoir répondre a ton problème

    http://sqlpro.developpez.com/cours/gestiontemps/#L3.3.3

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

Discussions similaires

  1. L'équivalent de FULL OUTER JOIN sous ACCESS
    Par Le Pharaon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/03/2013, 12h36
  2. Erreur FULL OUTER JOIN
    Par SwiTz dans le forum Requêtes
    Réponses: 14
    Dernier message: 02/04/2009, 13h33
  3. [Oracle 9] Probleme. FULL OUTER JOIN
    Par West01 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/10/2006, 07h46
  4. [ORACLE 9i] Equivalent du Full Outer Join
    Par Worldofdada dans le forum Oracle
    Réponses: 10
    Dernier message: 02/11/2005, 14h56
  5. Remplacer FULL OUTER JOIN
    Par funrighd dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/07/2004, 10h54

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