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 :

requete oracle


Sujet :

Oracle

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Par défaut requete oracle
    Boujour tout le monde, j'ai un devoir en Oracle et je doit faire cette requete :

    Ecrire une requête qui affiche le nombre d'occurrences de la lettre A dans le nom des employés.
    Cette requête devra comporter deux colonnes : Le nom de l'employé et les cas suivants:
    - Si l'employé n'a pas de A dans son nom :
    Pas de a
    - Si l'employé possède un A dans son nom :
    Un seul a en position <numero position>
    - Si l'employé possède deux A dans son nom :
    Un premier a en position <numero position> et un deuxième en position <numero position>.
    Trier le résultat en fonction des noms par ordre croissant.

    mais je n'arrive vraiment pas à trouver.

    Est-ce-que qqn aurait l'amabilité de m'aider ou au moins me donner une piste de recherche ?
    Merci d'avance.

    All the best

    z.e.k

  2. #2
    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
    utilises la fonction INSTR('chaine', 'occurence' [,pos]) qui te renvoie la position de l'occurence dans la chaine.
    pos : facultatif : position dans la chaine à partir de laquelle le instr est fait.

  3. #3
    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
    Pour savoir le nb exact d'occurence :
    nb de caract du nom - (nb de caract du nom dans lequel on a supprimé les 'A')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT length(nom) - length(replace(nom, 'A')) FROM T_EMPLOYES
    Tu as aussi le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DECODE( valeur_a_tester, egalité1, valeur_si_vrai, egalité2, valeur_si_vrai, ..., defaut)

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Par défaut re : requete oracle
    Merci bcp pour ta réponse !

    j'en suis arrivé cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT distinct last_name, 'a un "A" en ' || INSTR(last_name,'a') || 'e position' as "NBa" from employees where lower(last_name) like '%a%'
    UNION
    SELECT distinct last_name, 'a un premier a en ' || INSTR(last_name,'a') || 'e et en ' || INSTR(last_name,'a',1,2) || 'e position' as "NBa" from employees where lower(last_name) like '%a%a%'
    UNION
    SELECT last_name, 'n''a pas de "A" dans son nom' as "NBa" from employees where not(lower(last_name) like '%a%')
    /
    malheureusement, il m'affiche pour un nom avec de A (Haan) de fois le nom !

    une fois le premier A et une 2e fois les 2 A.

    auriez-vous une idée ?

    Merci d'avance

    All the best

    z.e.k

  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
    Ca va pas car tu ne compte pas exactement le nombre de "a" dans tes requetes (clauses where) (sauf la dernière)

    Avec un decode : Tu comptes le nb de "A"
    Si = 0 => 'PAS DE A'
    Si = 1 => '1A en position ' || position du A
    Autres : nb de A || ' A, le 1er en position ' || pos1 || 'le 2nd en position ' ||pos2.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT nom,  DECODE(
    	LENGTH(nom) - LENGTH(REPLACE(nom, 'A')),
    	0, 'Pas de A',
    	1 , '1A; en position ' || INSTR(nom, 'A'), 
    		LENGTH(nom) - LENGTH(REPLACE(nom, 'A')) || 'A; le premier en ' || INSTR(nom, 'A') || ' le second en ' || INSTR(nom, 'A', INSTR(nom, 'A') + 1))
     premier 
    FROM EMPLOYES
    A toi de voir pour mettre des UPPER sur les noms

  6. #6
    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
    Les soucis de ta requete :

    1/ INSTR(nom,'a') peut te renvoyer 0 si le nom est en majuscule, car tu le teste comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE LOWER(nom) LIKE '%a%'
    2/ quand tu testes LOWER(nom) LIKE '%a%' tu ne teste pas qu'il n'y a qu'un seul A. (Il y en a 1 mais pas 2 ou plus)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE LOWER(nom) LIKE '%a%' 
    AND LOWER(nom) NOT LIKE '%a%a%'
    3/ pas de DISTINCT (c'est pas un souci, mais ça sert à rien)

    ton code corrigé devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT last_name, 'a un "A" en ' || INSTR(LOWER(last_name),'a') || 'e position' AS "NBa" 
    FROM EMPLOYES 
    WHERE LOWER(last_name) LIKE '%a%' 
    AND LOWER(last_name) NOT LIKE '%a%a%' 
    UNION 
    SELECT last_name, 'a un premier a en ' || INSTR(LOWER(last_name),'a') || 'e et en ' 
    		|| INSTR(LOWER(last_name),'a',1,2) || 'e position' AS "NBa" 
    FROM EMPLOYES 
    WHERE LOWER(last_name) LIKE '%a%a%' 
    UNION 
    SELECT last_name, 'n''a pas de "A" dans son nom' AS "NBa" 
    FROM EMPLOYES
    WHERE NOT(LOWER(last_name) LIKE '%a%')

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Par défaut [résolu] requete Oracle
    Merci BEAUCOUP !!!
    Avec les les "upper" ca marche à la perfection !

    je voit qu'il me reste encore pas mal à bosser ...

    All the best

    z.e.k

  8. #8
    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
    Ok, un piti tag

Discussions similaires

  1. Compléter la requete Oracle par des nulls
    Par pjcejbpojo dans le forum Oracle
    Réponses: 17
    Dernier message: 22/05/2006, 15h25
  2. [Oracle] requete oracle avec php
    Par ghostdog dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/05/2006, 17h21
  3. transformation d'une requete oracle en mysql
    Par isa21493 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 02/03/2006, 16h00
  4. [REQUETE ORACLE] Vols avec ou sans escales
    Par e-lifestyle dans le forum Oracle
    Réponses: 7
    Dernier message: 06/01/2006, 22h46
  5. [sgbd]Optimisation des requetes Oracle/Perl
    Par linou dans le forum SGBD
    Réponses: 7
    Dernier message: 30/06/2005, 18h09

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