Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour 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 26/09/2008, 11h38   #1
Nouveau Membre du Club
 
Inscription : juin 2008
Messages : 161
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : juin 2008
Messages : 161
Points : 32
Points : 32
Par défaut Casse tête chinois

Bonjour,

J'ai une table TEST avec 3 colonnes ID1, ID2, ID3.

La table contient les données :
Code :
1
2
3
4
5
INSERT INTO TABLE TEST VALUES('PW','ATH','MIMA');
INSERT INTO TABLE TEST VALUES('ATH','MIMA','PW');
INSERT INTO TABLE TEST VALUES('ATH','FLEG','BGO');
INSERT INTO TABLE TEST VALUES('CMZ','FLEG','BGO');
INSERT INTO TABLE TEST VALUES('JLJ','PM','BDR');
2 lignes contiennent les même valeurs 'ATH', 'PW' et 'MIMA' mais pas dans les mêmes colonnes.

Je voudrais, par requête, obtenir une seule ligne avec le couple 'ATH', 'PW', 'MIMA'.

Merci de votre aide.
mortimer.pw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2008, 11h59   #2
Membre du Club
 
Étudiant
Inscription : juillet 2006
Messages : 60
Détails du profil
Informations personnelles :
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2006
Messages : 60
Points : 66
Points : 66
Tu peut utiliser une sous requête avec des union

Code :
1
2
3
4
5
6
7
8
9
10
11
12
SELECT DISTINCT
 
FROM (
SELECT ID1, ID2, ID3
FROM ...
 
union 
 
SELECT ID1, ID3, ID2
FROM ...
 
etc...)
Mais il y a surement une méthode plus simple
matoze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2008, 12h11   #3
Nouveau Membre du Club
 
Inscription : juin 2008
Messages : 161
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : juin 2008
Messages : 161
Points : 32
Points : 32
Par défaut casse tête chinois

Merci de répondre,

Peux-tu être un peu plus explicite sur ta réponse ?

Merci.
mortimer.pw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2008, 13h31   #4
Scorpi0
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Salut,

Comme ça peut être :

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
29
30
31
32
33
SELECT col1, col2, col3
FROM 
(
SELECT ID1 AS col1, ID2 AS col2, ID3 AS col3
FROM MyTable
 
union
 
SELECT ID1, ID3, ID2
FROM MyTable
 
union
 
SELECT ID2, ID1, ID3
FROM MyTable
 
union
 
SELECT ID2, ID3, ID1
FROM MyTable
 
union
 
SELECT ID3, ID1, ID2
FROM MyTable
 
union
 
SELECT ID3, ID2, ID1
FROM MyTable
)
GROUP BY col1, col2, col3
HAVING  count(1)>1

Dernière modification par Scorpi0 ; 26/09/2008 à 16h42.
  Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2008, 14h03   #5
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
Une seule requete
Code :
1
2
3
4
5
6
7
8
SELECT * FROM WMC_TEST
 
ID1	ID2	ID3
PW	ATH	MIMA
ATH	MIMA	PW
ATH	FLEG	BGO
CMZ	FLEG	BGO
JLJ	PM	BDR
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT ordre, 
	SUBSTR(ordre, 1, INSTR(ordre, CHR(1)) -1) AS id1,
	SUBSTR(ordre, INSTR(ordre, CHR(1)) +1, INSTR(ordre, CHR(1),-1) -INSTR(ordre, CHR(1))-1)  AS id2,
	SUBSTR(ordre, INSTR(ordre, CHR(1), -1) +1) AS id3
FROM
(SELECT CASE WHEN id1 <= id2 AND id2 <= id3 THEN id1 ||CHR(1)|| id2 ||CHR(1)|| id3
	WHEN id1 <= id3 AND id3 <= id2 THEN id1 ||CHR(1)|| id3 ||CHR(1)|| id2
	WHEN id2 <= id1 AND id1 <= id3 THEN id2 ||CHR(1)|| id1 ||CHR(1)|| id3
	WHEN id2 <= id3 AND id3 <= id1 THEN id2 ||CHR(1)|| id3 ||CHR(1)|| id1
	WHEN id3 <= id2 AND id2 <= id1 THEN id3 ||CHR(1)|| id2 ||CHR(1)|| id1
	WHEN id3 <= id1 AND id1 <= id2 THEN id3 ||CHR(1)|| id2 ||CHR(1)|| id1
       END   AS ordre
FROM wmc_test
)
GROUP BY ordre
HAVING COUNT(*) > 1
 
ORDRE		ID1	ID2	ID3
ATH|MIMA|PW	ATH	MIMA	PW
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2008, 19h59   #6
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 695
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 695
Points : 10 452
Points : 10 452
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Citation:
Envoyé par mortimer.pw Voir le message
Je voudrais, par requête, obtenir une seule ligne avec le couple 'ATH', 'PW', 'MIMA'.
Une précision linguistique, le couple se limite a deux éléments (sinon c'est la guerre à la maison).
Lorsqu'on a trois éléments on parle de triplet, lorsqu'on a N éléments on parle de N-uplet.
Waldar 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 06h21.


 
 
 
 
Partenaires

Hébergement Web