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 :

single-row subquery returns more than one row


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 2
    Par défaut single-row subquery returns more than one row
    Bonjour,
    Je cherche à faire une requête assez compliquée mais j'espère que vous pourrez m'aider, je ne comprend pas pourquoi ça ne marche pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select pt.case_nbr, im.dsp_sku, pt.create_date_time, 
    (select p5.CREATE_date_time from pix_tran p5 where p5.tran_type = '606' and p5.tran_code = '02' and p5.actn_code = '06' and p5.ref_field_4 = 'PQ' and pt.case_nbr = p5.case_nbr) as "Date de Sortie",
    (Select (case when (p2.tran_type = '300' and p2.tran_code = '01' and p2.actn_code = '06' and p2.ref_field_4 = 'PQ') then 'stock libre' when (p2.tran_type = '606' and p2.tran_code = '02' and p2.actn_code = '07' and p2.ref_field_4 = 'PQ') then 'Consommé' when (p2.tran_type = '606' and p2.tran_code = '02' and p2.actn_code = '07' and p2.ref_field_4 = 'RQ') then 'RQ' end) as "Vers" from pix_tran p2 where p2.case_nbr = pt.case_nbr)
     from pix_tran pt, item_master im where pt.tran_type = '606' and pt.tran_code = '02' and pt.actn_code = '01' and pt.ref_field_5 = 'PQ' and im.sku_id = pt.sku_id
    Merci de toute l'aide apportée.

  2. #2
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    "single-row subquery returns more than one row" :
    Quand tu fais un SELECT, chaque élément représente une valeur unique.

    Si tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT col1, col2, col3
    FROM Matable
    WHERE ...
    Aucun problème, col1, col2 et col3 ne représentent forcément qu'une seule valeur.

    Par contre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT col1, col2, col3, (SELECT Col4 FROM TaTable2 WHERE) as col4
    FROM Matable
    WHERE ...
    Le SELECT sur TaTable2 peut te renvoyer plusieurs lignes à ton SELECT principal, ce qui est ingérable.

    => A chaque fois que tu fais une telle chose, vérifie que le critère de liaison est assez fort pour que ça ne renvoit qu'une ligne.

    PS : indente ton code et mets des balises CODE !

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Parce qu'au moins une de vos deux requêtes scalaires ("Date de sortie" / "Vers") renvoie plus d'une ligne.
    Exécutez ces requêtes pour trouver où ça ne va pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select case_nbr, count(*)
    from pix_tran
    where tran_type = '606'
    and tran_code = '02'
    and actn_code = '06'
    and ref_field_4 = 'PQ'
    group by case_nbr
    having count(*) > 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select case_nbr, count(*)
    from pix_tran
    where (tran_type, tran_code, actn_code, ref_field_4) in (('300', '01', '06', 'PQ'), ('606', '02', '07', 'PQ'), ('606', '02', '07', 'RQ'))
    group by case_nbr
    having count(*) > 1

  4. #4
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 2
    Par défaut Sol
    Merci bcp !!

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/02/2008, 10h07
  2. Réponses: 14
    Dernier message: 15/11/2007, 10h22
  3. Réponses: 4
    Dernier message: 25/01/2007, 15h02
  4. Réponses: 3
    Dernier message: 08/12/2006, 17h28
  5. ORA-01427: single-row subquery returns more than one row
    Par hadid dans le forum Langage SQL
    Réponses: 3
    Dernier message: 31/10/2006, 15h35

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