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 Oracle Discussion :

Ajouter une colonne de sous-requête dans le Group By


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut Ajouter une colonne de sous-requête dans le Group By
    Bonjour,

    J'ai une requete avec un groupBy, je voudrais ajouter le résultat d'une sous requete dans la liste de group by, mais ça ne marche pas comme ça, je suis obligé d'utiliser la sous requete, parce que un join peut me retourner plusieurs lignes alors que je voudrais juste le champ en question (une ligne).

    voilà ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT to_char(trunc(t.CREATED_DATE),'YYYY-MM') as Month,
    t.NUMBER
    t.ACCOUNT as ACCOUNT,
    (SELECT  C.NAME  from  scm.company c,scm.person per where per.company_id = c.company_id and c.region='5' and c.uid = t.userID) as CUSTOMER,
     
    Count(1) as  No, 
    sum(t.qty) as SumOfQty
     
     FROM cm.company_order t 
     
    where t.created_date > to_date('2012-04-01','YYYY-MM-DD')
    Group BY to_char(trunc(t.CREATED_DATE),'YYYY-MM'),t.NUMBER ,t.ACCOUNT

  2. #2
    Membre expérimenté
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Par défaut
    pour restreindre les réponses hors sujets,
    Est-il possible d'avoir un petit jeu de données et le résultat escompté?

    As-tu une erreur ou juste de mauvais résultats?
    As-tu tenté de rajouter "CUSTOMER" dans ton groupBy?

  3. #3
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    si je l'ajoute dans le group by, j'ai l'erreur invalide identifier, si je l’enlève, en gardant la somme et le count le group by génère une erreur.

    Si j’enlève le count et le sum : (exemple pour un account)

    Month Number account customer qty
    2012-04 10 SMS CUS_PARIS 100
    2012-04 10 SMS CUS_PARIS 25
    2012-04 10 SMS CUS_PARIS 4
    2012-04 10 SMS CUS_PARIS 10

  4. #4
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    Déplace ta sous-requête au niveau du FROM et fais le lien avec t.userID dans la clause WHERE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT  a, b, c, x
    FROM   table,
       (SELECT y, x
       FROM  table2
       WHERE 1=1)
    WHERE   a = y
    GROUP BY a,b,c,x

  5. #5
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    J'ai essayé la solution en ajoutant le test a=y dans la sous requete ce qui ne fonctionne pas.
    Ta suggestion fonctionne bien, en y ajoutant un distinct dans la sous requete parce que sinon le résultat ressemble à celui d'un join (plusieurs lignes).

    Merci

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Ah je me suis avancé trop vite, il reste un cas pas traité, lorsque la sous requete ne retourne pas de résultat.

    la condition a = y bloque, je voudrais dans le cas ou a n'est pas présent dans la sous requete, retourner la ligne quand même avec y = null .

  7. #7
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    Jointure facultative dans ce cas

    ATTENTION, il s'agit de y qui est retournée par la sous-requête dand mon exemple, la jointure facultative se fait donc sur y et non a

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/04/2015, 13h48
  2. SELECT, JOIN et sous-requêtes dans une même colonne
    Par Alcorak dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/06/2011, 09h04
  3. [SP-2007] Ajouter une colonne de type "liste" dans une liste personnalisé
    Par strinty dans le forum SharePoint
    Réponses: 4
    Dernier message: 13/01/2011, 13h26
  4. [Graphics View] Ajouter une colonne contenant des images dans un QTableView
    Par vikki dans le forum Qt
    Réponses: 8
    Dernier message: 14/09/2010, 14h00
  5. Ajouter une colonne (par du code) dans Listview
    Par __fabrice dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 23/11/2005, 17h39

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