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 :

ORDER BY suivant les valeurs du IN


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2010
    Messages : 366
    Points : 121
    Points
    121
    Par défaut ORDER BY suivant les valeurs du IN
    Bonjour,
    Je veux faire un order by suivant le valeurs mises dans le IN du WHERE
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ID , NOM from table where ID IN(5,99,66)
    J'aurais comme résultat l'élément 5 puis 99 puis 66 dans le résultat de la requête et non pas 5 puis 66 puis 99.

    Merci

  2. #2
    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
    ORDER BY decode(id, 5,1, 99,2, 66,3)
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Il n’y pas de relation d’ordre dans l’ensemble (5, 99, 66) à parte celle imposée par l’écriture de gauche à droite. C’est bizarre comme demande donc probablement qu’il vous faut autre chose.
    Sinon vous pouvez y arriver à l’aide d’une fonction "foo(id, liste)" comme sugère pas McM.

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2010
    Messages : 366
    Points : 121
    Points
    121
    Par défaut
    ça ne marche pas McM

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    C'est à rajouter après votre requête bien entendu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      SELECT ID, NOM
        FROM table
       WHERE ID IN (5, 99, 66)
    ORDER BY DECODE(ID, 5, 1, 99, 2, 66, 3) ASC;

  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
    Citation Envoyé par DeveloppeurWeb Voir le message
    ça ne marche pas McM
    Réponse non satisfaisante !
    "Ca ne marche pas" sans détail.. on va pas deviner.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT owner, object_id, data_object_id, object_type
    FROM all_objects
    WHERE object_ID IN (5, 99, 66)
    ORDER BY DECODE(object_ID, 5, 1, 99, 2, 66, 3) 
     
    OWNER	OBJECT_ID	DATA_OBJECT_ID	OBJECT_TYPE
    SYS	5	2	TABLE
    SYS	99	99	TABLE
    SYS	66	66	INDEX
    Je suppose que le besoin est plus compliqué.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2010
    Messages : 366
    Points : 121
    Points
    121
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SQL> select t.ID_TARIF from TARIF T where t.ID_TARIF IN (7110,7108,7107);
     
      ID_TARIF
    ----------
          7107
          7108
          7110
     
    SQL>
    Je ne sais pas , comment vous dites que ce n'est pas clair.
    Je veux que mon résultat soit

    ID_TARIF
    ----------
    7110
    7108
    7107

    Comme j'ai mis dans le IN

    Je crois que c'est clair maintenant.

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Avez-vous *lu* les réponses #2, #5, #6 ?
    Si oui, comment faites-vous pour ne pas en tenir compte ?

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2010
    Messages : 366
    Points : 121
    Points
    121
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Avez-vous *lu* les réponses #2, #5, #6 ?
    Si oui, comment faites-vous pour ne pas en tenir compte ?
    Est ce que tu as essayé ces réponses?

    Voilà un jeu d'essai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT t.ID_TARIF FROM TARIF T WHERE t.ID_TARIF IN (7110,7107,7108) ORDER BY DECODE(t.ID_TARIF, 7107,7108,7110) asc
    Résultat
    7107
    7110
    7108

  10. #10
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Cela fait 4 ans que vous essayez d'écrire cette requête ???

    Je pense que Waldar sous entendait lu "attentivement"...

    Dans ce cas vous auriez remarqué les numéros d'ordre (1,2,3) inclus dans le decode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT t.ID_TARIF FROM TARIF T WHERE t.ID_TARIF IN (7110,7107,7108) ORDER BY DECODE(t.ID_TARIF, 7107,1,7108,2,7110,3) ASC
    Comme maintenant vous avez 4 ans de retard dans votre travail, si vous n'avez plus le temps d'aller lire la documentation du DECODE pour savoir (et comprendre) ce qu'il fait, voici un équivalent en SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT t.ID_TARIF 
    FROM TARIF T 
    WHERE t.ID_TARIF IN (7110,7107,7108) 
    ORDER BY CASE t.ID_TARIF
        WHEN  7107 THEN 1
        WHEN  7108 THEN 2
        WHEN  7110 THEN 3
        END ASC

  11. #11
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par DeveloppeurWeb Voir le message
    Est ce que tu as essayé ces réponses?
    ...
    Comment dirais-je, si au bout de 4 année vous n’y est pas encore parvenu, ne vous en fait pas trop ce n’est pas grave il y a des autre choses à faire dans la vie.

  12. #12
    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
    Oh purée.. ces posts m'ont fait éclater de rire.. La journée se finit super bien du coup
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  13. #13
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Cela dit je n'avais pas été très cordial dans ma deuxième réponse.
    Je vais contacter un modérateur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sélection suivant les valeurs de tags d'un objet
    Par fanfouer dans le forum Langage SQL
    Réponses: 7
    Dernier message: 26/03/2010, 18h07
  2. Réponses: 7
    Dernier message: 02/11/2008, 18h02
  3. order by sans les valeurs NULL
    Par pendragon509 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/10/2005, 12h31
  4. ORDER BY : spécifier les valeurs dans la requete
    Par maxo dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/07/2005, 16h17

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