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 :

Requete difficile ?


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Requete difficile ?
    Salut à tous,

    Je souhaite réaliser une requête mais je n'ai aucune idée des moyens pour pouvoir le faire.

    J'ai des tuples contenant contenant des chaines de caractéres comme ceci

    Tuple 1: Un, Trois, Cinq, Six
    Tuple 2: Un, Deux, Quatre
    Tuple 3: Trois,
    Tuple 4: Sept, Huit,
    Tuple 5: Un, Six
    ...

    Je voudrais faire une requête qui me sors autant de tuple que de mots différents (contenant ce mot).
    Pour cet exemple, j'aurai :
    Tuple 1: Un
    Tuple 2: Deux
    Tuple 3: Trois
    Tuple 4: Quatre
    Tuple 5: Cinq
    Tuple 6: Six
    Tuple 7: Sept
    Tuple 8: Huit

    (Dans ce cas j'ai rangé dans l'ordre numérique, mais en fait je m'en fou, je ferai par ordre alphabétique).

    Voilà si quelqu'un à une idée, je suis preneur.

    Merci d'avance !

  2. #2
    fab
    fab est déconnecté
    Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 44
    Points : 49
    Points
    49
    Par défaut
    Salut,

    Si j'ai bien compris, tu as une table(champ1, champ2,champ3,...) ou les valeurs de chacun des champs sont des nombres en alpahnumériques, et tu veux tout remettre sur une seule colonne.

    Si c'est cela, tu commences par transformer tes colonnes en lignes avec des unions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select champ1 from table
    union
    select champ2 from table
    Et puis pour éliminer les doublons, tu fais une requête group by avec en sous-requete la précédente.

    Mais y a peut-être plus élégant...

  3. #3
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Moi j'avais compris plutôt que c'était des chaines de caractères avec une suite de mot séparés par des ','
    Faudrait le DESC de la table.

    PS : la notion de tuples, ça me rappelle la FAC. J'ai jamais réutilisé ce mot depuis.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par McM
    Moi j'avais compris plutôt que c'était des chaines de caractères avec une suite de mot séparés par des ','
    Faudrait le DESC de la table.

    PS : la notion de tuples, ça me rappelle la FAC. J'ai jamais réutilisé ce mot depuis.
    Lol ouais les tuples c'est un terme matheux

    C'est exactement ca, si vous voulez on peut prendre l'exemple d'une table avec un seul champ et tous les records de ce champ sont des chaines de mots séparés par une virgule ','. Je souhaite faire une requete qui me sors un record par mot.

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

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Je suppose que tu connais pas le nb maxi de mots par colonne.
    Dans ce cas, faut passer par une fonction

  6. #6
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    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
    WITH T AS (SELECT 'Un, Trois, Cinq, Six' || ',' AS l FROM DUAL 
    UNION ALL SELECT 'Un, Deux, Quatre' || ',' FROM DUAL 
    UNION ALL SELECT 'Trois, '|| ',' FROM DUAL 
    UNION ALL SELECT 'Sept, Huit, ' || ',' FROM DUAL 
    UNION ALL SELECT 'Un, Six' || ',' FROM DUAL 
    		), 
    M AS (SELECT 	l, 
    		TRIM(SUBSTR(l, 1, INSTR(l, ',', 1, 1) -1 )) AS mot1, 
    		TRIM(SUBSTR(l, INSTR(l, ',', 1, 1) +1, INSTR(l, ',', 1, 2) - INSTR(l, ',', 1, 1) - 1)) AS mot2, 
    		TRIM(SUBSTR(l, INSTR(l, ',', 1, 2) +1, INSTR(l, ',', 1, 3) - INSTR(l, ',', 1, 2) - 1)) AS mot3, 
    		TRIM(SUBSTR(l, INSTR(l, ',', 1, 3) +1, INSTR(l, ',', 1, 4) - INSTR(l, ',', 1, 3) - 1)) AS mot4 
    FROM t) 
    	SELECT mot1 FROM M WHERE mot1 IS NOT NULL 
    UNION 
    	SELECT mot2 FROM M WHERE mot2 IS NOT NULL 
    UNION 
    	SELECT mot3 FROM M WHERE mot3 IS NOT NULL 
    UNION 
    	SELECT mot4 FROM M WHERE mot4 IS NOT NULL 
    ORDER BY 1

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par McM
    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
    WITH T AS (SELECT 'Un, Trois, Cinq, Six' || ',' AS l FROM DUAL 
    UNION ALL SELECT 'Un, Deux, Quatre' || ',' FROM DUAL 
    UNION ALL SELECT 'Trois, '|| ',' FROM DUAL 
    UNION ALL SELECT 'Sept, Huit, ' || ',' FROM DUAL 
    UNION ALL SELECT 'Un, Six' || ',' FROM DUAL 
    		), 
    M AS (SELECT 	l, 
    		TRIM(SUBSTR(l, 1, INSTR(l, ',', 1, 1) -1 )) AS mot1, 
    		TRIM(SUBSTR(l, INSTR(l, ',', 1, 1) +1, INSTR(l, ',', 1, 2) - INSTR(l, ',', 1, 1) - 1)) AS mot2, 
    		TRIM(SUBSTR(l, INSTR(l, ',', 1, 2) +1, INSTR(l, ',', 1, 3) - INSTR(l, ',', 1, 2) - 1)) AS mot3, 
    		TRIM(SUBSTR(l, INSTR(l, ',', 1, 3) +1, INSTR(l, ',', 1, 4) - INSTR(l, ',', 1, 3) - 1)) AS mot4 
    FROM t) 
    	SELECT mot1 FROM M WHERE mot1 IS NOT NULL 
    UNION 
    	SELECT mot2 FROM M WHERE mot2 IS NOT NULL 
    UNION 
    	SELECT mot3 FROM M WHERE mot3 IS NOT NULL 
    UNION 
    	SELECT mot4 FROM M WHERE mot4 IS NOT NULL 
    ORDER BY 1
    Uhuh, merci, je vais me pencher dessus !

  8. #8
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Ca c'est si tu as un nb bien défini de mots par colonne.
    Sinon, c'est une fonction qu'il faut faire.

  9. #9
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    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
     
    SQL> with t as (
      2   select 'Un, Trois, Cinq, Six' c from dual union all
      3   select 'Un, Deux, Quatre' from dual union all
      4   select 'Trois' from dual union all
      5   select 'Sept, Huit' from dual union all
      6   select 'Un, Six' from dual
      7   )
      8  select distinct extractvalue(column_value,'/x')
      9  from t,
     10    table(xmlsequence(extract(xmltype(
     11      '<list><x>'||replace(c,', ','</x><x>')||'</x></list>'),
     12      '/list/x')))
     13  ;
    EXTRACTVALUE(COLUMN_VALUE,'/X')
    ---------------------------------------------------------------------------------------------------------------------------------------
    Trois
    Un
    Quatre
    Cinq
    Six
    Deux
    Sept
    Huit
     
    8 rows selected.

  10. #10
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Alors là, Respect.

Discussions similaires

  1. Debutant : Requete difficile
    Par SebRs dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/11/2007, 09h24
  2. [AVANCE] Requete difficile.. Avis aux confirmés !
    Par Lideln dans le forum Langage SQL
    Réponses: 6
    Dernier message: 21/07/2007, 19h43
  3. Requete difficile
    Par jejam dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/12/2005, 16h24
  4. Requete difficile à concevoir, voire impossible
    Par zarbiman dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/07/2005, 18h48
  5. requete difficile
    Par graphicsxp dans le forum Langage SQL
    Réponses: 5
    Dernier message: 24/03/2005, 09h59

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