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

Oracle Discussion :

ORA-01427: single-row subquery returns more than one row


Sujet :

Oracle

  1. #1
    Futur Membre du Club
    Profil pro
    DBA
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 7
    Points
    7
    Par défaut ORA-01427: single-row subquery returns more than one row
    Bonjour,
    Je suis nouvelle sur ce forum et je me tourne vers vous pour un petit problème de requête SQL.

    J'aimerai faire afficher sur une même ligne, les données provenant d'une table C1 et les données issue d'une autre table I2.
    Je sais qu'il existe dans la table I2 pour cet identifiant (cpsidt) plusieurs lignes.

    Comment faire pour qu'il puisse m'afficher les deux lignes ?

    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
    SELECT   C1.CPSIDT,
             '|',
             C1.CPSIDTS,
             '|',
             C1.CPSIDT2,
             '|',
             C1.CPSIDT4,
             '|',
             (SELECT DISTINCT (SUBSTR(I2.IDTDCM,1,15))
              FROM   IDTDCM I2
              WHERE  C1.CPSIDT = I2.CPSIDT
                     AND I2.TIDCOD = 'clea') CLEA
    FROM     CPSNTC C1
    WHERE    C1.CPSIDT IN (482096)
    GROUP BY C1.CPSIDT,C1.CPSIDTS,C1.CPSIDT2,C1.CPSIDT4
    Merci d'avance pour vos réponses

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Pouvez-nous donner un jeu d'essai minimal représentant ce que vous souhaitez faire parce qu'il me semble que vous faîtes des "traitements contradictoires".
    En effet, je pense au GROUP BY et à la sous-requête dans le SELECT qui ramène plus d'un enregistrement.

  3. #3
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    En faisant une jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT DISTINCT  C1.CPSIDT,
             '|',
             C1.CPSIDTS,
             '|',
             C1.CPSIDT2,
             '|',
             C1.CPSIDT4,
             '|',
             SUBSTR(I2.IDTDCM,1,15)
    FROM     CPSNTC C1, IDTDCM I2
    WHERE    C1.CPSIDT IN (482096)
      AND C1.CPSIDT = I2.CPSIDT
      AND I2.TIDCOD = 'clea';
    Vérifiez que vous avez bien besoin du distinct (c'est gourmand en perf.)

  4. #4
    Futur Membre du Club
    Profil pro
    DBA
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Pour vous expliquer un peu mieux mon problème.

    Description de la table CPSNTC
    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
    CPSIDT     NOT NULL NUMBER(8)
    CPSZIP1    NOT NULL RAW(2000)
    CPSZIP2    NOT NULL RAW(2000)
    CREDAT     NOT NULL DATE
    MAJDAT     NOT NULL DATE
    CHGDAT     NOT NULL DATE
    CPSVER     NOT NULL NUMBER(8)
    TCPCOD     NOT NULL VARCHAR2(5)
    ODOBIB              VARCHAR2(10)
    ODORENG             VARCHAR2(10)
    ODORFRE             VARCHAR2(10)
    ODORGER             VARCHAR2(10)
    ODORSPA             VARCHAR2(10)
    ODOIPF              VARCHAR2(10)
    ODOCCLP             VARCHAR2(10)
    ODOCCLF             VARCHAR2(10)
    ODOISIG             VARCHAR2(10)
    ODOIENV             VARCHAR2(10)
    ODOIAUT             VARCHAR2(10)
    ODOMDM              VARCHAR2(10)
    ODORFC              VARCHAR2(10)
    ODOLINI             VARCHAR2(10)
    ODOLREC             VARCHAR2(10)
    CPSIDTS             NUMBER(8)
    CPSIDT2             NUMBER(8)
    CPSIDT3             NUMBER(8)
    CPSIDT4             NUMBER(8)
    INDNDCM             NUMBER(1)
    Description de la table IDTDCM
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TIDCOD   NOT NULL VARCHAR2(10)
    IDTDCM   NOT NULL VARCHAR2(3700)
    CPSIDT   NOT NULL NUMBER(8)
    IDTNOR   NOT NULL VARCHAR2(3700)
    Dans la table IDTDCM, le champ TIDCOD regroupe des élèments telque "clea", "geac", "cleab", etc. Ces élèments, j'aimerai les faire afficher sous forme de tableaux avec en tête de colonne :
    CPSIDT, CPSIDTS, CPSIDT2, CPSIDT4, CLEA, GEAC, CLEAB.

    Dans la requete, que je vous fournis, je ne vous ai affiché qu'un SELECT.
    Ma requete est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select C1.cpsidt,'|',cpsidts, '|', cpsidt2, '|', cpsidt4,'|', 
    (select (substr(idtdcm, 1,15)) from idtdcm I2 where C1.cpsidt = I2.cpsidt and tidcod='geac') GEAC, '|',
    (select (substr(idtdcm, 1,15)) from idtdcm I2 where C1.cpsidt = I2.cpsidt and tidcod='clea') CLEA, '|',
    (select (substr(idtdcm, 1,15)) from idtdcm I2 where C1.cpsidt = I2.cpsidt and tidcod='cleab') CLEAB, '|',
    (select substr(idtdcm, 1,15) from idtdcm I2 where C1.cpsidt = I2.cpsidt and I2.tidcod='sgbidt' and I2.idtdcm like 'b%') SGB,
    from CPSNTC C1
    where C1.cpsidt in (
     482096 )
    group by C1.cpsidt, C1.cpsidts, C1.cpsidt2, C1.cpsidt4;
    Merci pour vos réponses

Discussions similaires

  1. Erreur ORA-01427 single-row subquery returns more than one row
    Par SmileAndFly dans le forum Langage SQL
    Réponses: 10
    Dernier message: 29/08/2008, 15h12
  2. Réponses: 5
    Dernier message: 01/02/2008, 10h07
  3. Réponses: 14
    Dernier message: 15/11/2007, 10h22
  4. Réponses: 4
    Dernier message: 25/01/2007, 15h02
  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