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

Langage SQL Discussion :

Aide requête sql Oracle et doublon dans le résultat


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 84
    Points : 54
    Points
    54
    Par défaut Aide requête sql Oracle et doublon dans le résultat
    bonjour
    je souhaite ressortir les commandes, montant et le nombre de bons de livraison associées à chaque ligne, le tout groupé par date.
    Seulement, pour chaque BL compté, ma requête multiplie la somme


    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
     
    select distinct
    soh.bpcord_0 as "client",
    soh.orddat_0 as "date",
    sum(soh.ORDNOT_0) as "mt",
    count(distinct sdh.sdhnum_0) as "nb_bl"
     
    from sorder soh
    left outer join sdelivery sdh on (soh.sohnum_0=sdh.sohnum_0)
     
    where 
    to_char(soh.orddat_0,'YYYYMMDD')>=20180701
    and to_char(soh.orddat_0,'YYYYMMDD')<=20180731
     
    group by 
      soh.bpcord_0,
      soh.orddat_0
    auriez-vous une idée ?
    merci

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Il suffit de faire la somme avant la jointure :
    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
      with m as (
    select soh.bpcord_0
         , soh.orddat_0
         , sum(soh.ORDNOT_0) as mt
      from sorder soh
     where soh.orddat_0 >= to_date('20180701','YYYYMMDD')
       and soh.orddat_0  < to_date('20180731','YYYYMMDD') + 1
     group by soh.bpcord_0
            , soh.orddat_0
    )
    select m.bpcord_0 as m_client
         , m.orddat_0 as m_date
         , m.mt
         , count(distinct sdh.sdhnum_0) as nb_bl 
      from m
      left join sdelivery sdh 
        on sdh.sohnum_0 = m.sohnum_0
     group by m.bpcord_0
            , m.orddat_0
    PS : J'ai réécrit le filtre sur la date pour manipuler des dates et profiter d'un éventuel index sur la colonne SORDER.ORDDAT_0.
    En plus, de la façon dont vous l'aviez écrit, il y avait une conversion implicite.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 84
    Points : 54
    Points
    54
    Par défaut
    bonjour
    merci de votre réponse, cependant je rencontre quelques soucis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-00904: "M"."SOHNUM_0": invalid identifier
    je suppose que l'alias M provient du with (qui créé une table temporaire ?), ensuite on va rechercher les données dans celle-ci ?
    mais sohnum n'est pas déclaré dans le select

    svp

  4. #4
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 58
    Points : 66
    Points
    66
    Par défaut
    Non il n'est pas connu, justement parce que "m" ne retourne que ce qu'il a dans son select.
    Ajoute le dans le with et ça va rouler

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 84
    Points : 54
    Points
    54
    Par défaut
    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
      with m as (
    select soh.bpcord_0
    	 , soh.sohnum_0
         , soh.orddat_0
         , sum(soh.ORDNOT_0) as mt
      from sorder soh
     where soh.orddat_0 >= to_date('20180701','YYYYMMDD')
       and soh.orddat_0  < to_date('20180731','YYYYMMDD') + 1
     group by soh.bpcord_0
      		, soh.sohnum_0
            , soh.orddat_0
    )
    select m.bpcord_0 as m_client
         , m.orddat_0 as m_date
         , m.mt
         , count(distinct sdh.sdhnum_0) as nb_bl 
      from m
      left join sdelivery sdh 
        on sdh.sohnum_0 = m.sohnum_0
     group by m.bpcord_0
            , m.orddat_0
    not a group by expression

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    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
      with m as (
    select soh.bpcord_0
    	 , soh.sohnum_0
         , soh.orddat_0
         , sum(soh.ORDNOT_0) as mt
      from sorder soh
     where soh.orddat_0 >= to_date('20180701','YYYYMMDD')
       and soh.orddat_0  < to_date('20180731','YYYYMMDD') + 1
     group by soh.bpcord_0
      		, soh.sohnum_0
            , soh.orddat_0
    )
    select m.bpcord_0 as m_client
         , m.orddat_0 as m_date
         , m.mt
         , count(distinct sdh.sdhnum_0) as nb_bl 
      from m
      left join sdelivery sdh 
        on sdh.sohnum_0 = m.sohnum_0
     group by m.bpcord_0
            , m.orddat_0
            , m.mt

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 84
    Points : 54
    Points
    54
    Par défaut
    ah oui, il manquait le montant
    merci

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 84
    Points : 54
    Points
    54
    Par défaut
    fonctionne parfaitement à priori
    un grand merci et en plus j'ai appris l'utilisation de with

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

Discussions similaires

  1. Aide pour une sous-requète "dans" un WHERE
    Par trucmuche2005 dans le forum Requêtes
    Réponses: 3
    Dernier message: 23/06/2017, 10h45
  2. [AC-2010] Aide sous-formulaire requête
    Par mcharmat dans le forum IHM
    Réponses: 3
    Dernier message: 03/01/2013, 04h25
  3. Aide sur sous requête
    Par zebulo80 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 20/12/2011, 17h01
  4. Aide pour une requête sans doublons
    Par demorgan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/11/2011, 18h22
  5. Aide pour requête SQL sous Access
    Par la bulle dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 05/05/2009, 08h16

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