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

PL/SQL Oracle Discussion :

[SQL] Select imbriqué


Sujet :

PL/SQL Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut [SQL] Select imbriqué
    Bonjour à tous !

    je suis sur une requête de sélection de coûts d'articles d'une table, sauf qu'elle contient plusieurs couts correspondants à chaque transaction, comme le montre la requête en dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select distinct inventory_item_id, actual_cost , last_update_date from apps.MTL_CST_ACTUAL_COST_DETAILS

    Le problème c'est de faire un second select avec fixation de l'élément inventory_item_id pour pouvoir calculer le coût moyen de cet article . Et c'est là que je bloque !

    Quelqu'un pourrait me montrer le chemin que je dois suivre? Merci de votre aide !

  2. #2
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Bonjour,

    Si j'ai bien compris tu veux le coût moyen en fonction de inventory_item_id, pour cela il te faut utiliser avg et un group by :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id, avg(cout)
    FROM MaTable
    GROUP BY id
    Si ce n'est pas ça, alors il faut mettre plus d'informations : des jeux d'essai avec résultats attendus.
    ~ Lola ~

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Bonjour Lola06,
    merci pour ta réponse , mais l'AVG est également effectué sur la colonne inventory_item_id, du coup ca trompe les résultats.

    Ehh, également un autre truc : l'average ne marche pas en jointure de tables.
    Pour mieux voir la sortie de ma requete , je te prie de voir le fichier joint (excel) sur la discussion.
    Encore merci pr l'aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select distinct item.SEGMENT1 as item ,
    cost.inventory_item_id, cost.actual_cost , cost.last_update_date
    from apps.MTL_CST_ACTUAL_COST_DETAILS cost,
    mtl_system_items item
    where item.inventory_item_id = cost.inventory_item_id
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par mcslash99 Voir le message
    ...Ehh, également un autre truc : l'average ne marche pas en jointure de tables.
    ...
    Si si, il marche très bien mais probablement que vous n’avez pas tout compris.

    Pour votre problème fournissez un jeu d’essai avec la création des tables et les requêtes d’alimentation des données représentatives de ces tables ainsi que le résultat attendu.

  5. #5
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Vous êtes deux à me recommander un jeu d'essai , sans que je sache ce que c'est . c'est bien une modélisation banale de ma table du genre en dessous ?

    item | cost | date
    A | 0 | 01/01/2012
    B | 1,5 | 01/01/2012
    B | 2 | 31/05/2012
    B | 3 | 18/02/2012
    C | 1 | 01/01/2012
    C | 0 | 01/02/2012
    D | 2 | 01/01/2012

    Merci !

  6. #6
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Citation Envoyé par mcslash99 Voir le message
    Vous êtes deux à me recommander un jeu d'essai , sans que je sache ce que c'est . c'est bien une modélisation banale de ma table du genre en dessous ?

    item | cost | date
    A | 0 | 01/01/2012
    B | 1,5 | 01/01/2012
    B | 2 | 31/05/2012
    B | 3 | 18/02/2012
    C | 1 | 01/01/2012
    C | 0 | 01/02/2012
    D | 2 | 01/01/2012

    Merci !
    Oui c'est bien cela. Et pour être sur que l'on se comprenne bien, il faudrait que tu nous fasse (sur la base des mêmes données) une table des résultats attendus.

    Est-ce que c'est ça que tu recherches :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    item    | moyenne
    A | 0        
    B | 2.1      
    C | 0.5
    D | 2
    Vous parlez ici des jointures mais il serait mieux d'avoir la description des tables. Au passage l'utilisation de JOIN pour les jointures est la norme.

    En quoi la requête que je vous ai proposé ne marche pas ?
    ~ Lola ~

  7. #7
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Youpi ! ca marche pr la requête à base d'average à une seule table.

    Mais pour te répondre , j'essaie de faire des selects sur plusieurs tables (afin d'extraire d'autres informations) . Donc quand je combine ça me donne pas la main
    : ORA-00979: not a GROUP BY expression
    exemple d'autre table : articles :
    item : A - B - C - D
    libellé : stylo - papier - toner - agraphes

    Le résultat ciblé est :
    item - libellé - coût moyen
    A - stylo - 2
    B - papier - 100
    C - toner - 14
    D - agraphes - 5

    Encore merci !

  8. #8
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Citation Envoyé par mcslash99 Voir le message
    Youpi ! ca marche pr la requête à base d'average à une seule table.

    Mais pour te répondre , j'essaie de faire des selects sur plusieurs tables (afin d'extraire d'autres informations) . Donc quand je combine ça me donne pas la main

    exemple d'autre table : articles :
    item : A - B - C - D
    libellé : stylo - papier - toner - agraphes

    Le résultat ciblé est :
    item - libellé - coût moyen
    A - stylo - 2
    B - papier - 100
    C - toner - 14
    D - agraphes - 5

    Encore merci !
    Il n'y a aucune raison que cela ne marche pas. Peux-tu nous mettre la requête qui renvoi cette erreur. A priori je dirai que tu oubli des colonnes dans ton GROUP BY.
    ~ Lola ~

  9. #9
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select item.segment1, cost.inventory_item_id , avg(cost.actual_cost)
    from MTL_CST_ACTUAL_COST_DETAILS cost,
    mtl_system_items item
    where item.inventory_item_id = cost.inventory_item_id
    and cost.organization_id = '199'
    group by cost.inventory_item_id
    Si j'enlève le segment1 (intitulé de l'article) et la liaison avec la table item , la requête est bonne.

    Merci.

  10. #10
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Ta requête est mal écrite. En effet tous les champs présents dans le select à côté de l'opérateur de moyenne doit être présent dans ton GROUP BY.

    Donc, ceci devrait fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT item.segment1, cost.inventory_item_id , avg(cost.actual_cost) 
    FROM MTL_CST_ACTUAL_COST_DETAILS cost, mtl_system_items item 
    WHERE item.inventory_item_id = cost.inventory_item_id 
    AND cost.organization_id = '199' 
    GROUP BY item.segment1, cost.inventory_item_id
    Au passage, essayez d'utiliser les jointures normalisées.
    ~ Lola ~

  11. #11
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    C'est une info que je viens de savoir. Je dormirai moins bête ce soir !

    Merci Laure ! J'ai bcp apprécié , et ca marche

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

Discussions similaires

  1. Select imbriqué SQL
    Par traz0m76 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 16/04/2012, 16h10
  2. optimisation de requête sql avec select imbriquées
    Par yassine_le_boss dans le forum SQL
    Réponses: 6
    Dernier message: 02/11/2010, 22h12
  3. [SQL SERVER] SELECT IMBRIQUE -> Mettre une instruction.
    Par dacid dans le forum Langage SQL
    Réponses: 16
    Dernier message: 20/04/2009, 16h48
  4. [ SQL ] Faire un update avec un select imbriqué
    Par zozolh2 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/04/2005, 12h05
  5. SQL :select et AND
    Par Shabata dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/05/2003, 13h39

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