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 :

Casse tête chinois


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Juin 2008
    Messages : 171
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 62
    Par défaut
    Tu peut utiliser une sous requête avec des union

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Juin 2008
    Messages : 171
    Par défaut casse tête chinois
    Merci de répondre,

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

    Merci.

  4. #4
    Scorpi0
    Invité(e)
    Par défaut
    Salut,

    Comme ça peut être :

    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
    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.

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Une seule requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    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

  6. #6
    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
    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.

Discussions similaires

  1. [1.x] embedForm / mergeForm => casse tête chinois
    Par erictomcat dans le forum Symfony
    Réponses: 17
    Dernier message: 08/02/2011, 23h56
  2. SMSLIB casse tête chinois
    Par yashiro dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 02/11/2007, 11h45
  3. Casse tête chinois
    Par Jahjouh dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 15/03/2006, 09h04
  4. Classe, pile, pointeurs et casse-tête!
    Par zazaraignée dans le forum Langage
    Réponses: 6
    Dernier message: 26/09/2005, 16h57
  5. casse-tête excel
    Par gregius dans le forum Access
    Réponses: 2
    Dernier message: 21/09/2005, 16h38

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