Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/12/2006, 15h59   #1
Invité de passage
 
Inscription : décembre 2006
Messages : 6
Détails du profil
Informations personnelles :
Âge : 42
Localisation : France

Informations forums :
Inscription : décembre 2006
Messages : 6
Points : 1
Points : 1
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 :
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
flogrange est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2006, 16h47   #2
Membre Expert
 
Inscription : avril 2005
Messages : 1 672
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 1 672
Points : 1 337
Points : 1 337
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.
Magnus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2006, 17h08   #3
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
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 866
Points : 3 448
Points : 3 448
En faisant une jointure :
Code :
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.)
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2006, 17h28   #4
Invité de passage
 
Inscription : décembre 2006
Messages : 6
Détails du profil
Informations personnelles :
Âge : 42
Localisation : France

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

Description de la table CPSNTC
Code :
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 :
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 :
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
flogrange est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h12.


 
 
 
 
Partenaires

Hébergement Web