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 :

[SQL] clause order by


Sujet :

SQL Oracle

  1. #1
    Membre actif

    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 87
    Points : 281
    Points
    281
    Par défaut [SQL] clause order by
    bonjour,

    je souhaite faire un order by incluant un decode sur une union de 2 select.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select ...
    union
    select...
     order by decode (4, 'LOTD', 1, 'LOT', 2, 'DLUO', 2, 3), 1;
    Apparemment cela ne fonctionne pas, j'obtiens l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    1571/2   PL/SQL: SQL Statement ignored
    1621/12  PL/SQL: ORA-01785: ORDER BY item must be the number of a
             SELECT-list expression
    merci d'avance

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Il manque un argument (le 1er qui est "la valeur à analyser") dans votre invocation de DECODE.

  3. #3
    Membre actif

    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 87
    Points : 281
    Points
    281
    Par défaut
    ma colonne à analyser est bien ma 4ème colonne. Je ne peux pas indiquer la colonne par son nom.

  4. #4
    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
    Le decode va comprendre la valeur 4 et non la colonne 4 donc ça ne marchera pas.
    Pourquoi tu n'aliases pas tes colonnes ?


    Par contre il faut faire un select de ton union pour que tes colonnes soient nommées.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT *
    FROM 
    (SELECT 'A' AS c1, 'B' AS c2, 'C' AS c3, 'LOTD' AS c4	FROM dual
    UNION
    SELECT 'AA', 'BB', 'CC', 'DD' FROM dual
    ) 
    ORDER BY DECODE (c4, 'LOTD', c1, 'LOT', c2, 'DLUO', c2, c3), c1

  5. #5
    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
    Citation Envoyé par McM
    Le decode va comprendre la valeur 4 et non la colonne 4 donc ça ne marchera pas.
    Pourquoi tu n'aliases pas tes colonnes ?
    l'alias ne vas pas aidé. Il est impossible d'utiliser une fonction dans le order by quand le order by concerne un set... il faut une sous-requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SQL> select 1 x from dual union select 2 from dual order by sqrt(x);
    select 1 x from dual union select 2 from dual order by sqrt(x)
                                                           *
    ERROR at line 1:
    ORA-01785: ORDER BY item must be the number of a SELECT-list expression
     
    SQL> select * from (select 1 x from dual union select 2 from dual) order by sqrt(x);
     
             X
    ----------
             1
             2

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

Discussions similaires

  1. SQL 2005 Clause ORDER BY dans une vue
    Par Philippe Robert dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 02/10/2011, 18h18
  2. [SQL Server 2005] Clause order by sur un curseur
    Par nox75 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/09/2008, 15h45
  3. Problème clause "ORDER BY" dans bloc PL/SQL
    Par craweb dans le forum PL/SQL
    Réponses: 3
    Dernier message: 05/03/2007, 09h33
  4. [SQL Server 8] La clause order by
    Par Baquardie dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/01/2006, 22h58
  5. Réponses: 10
    Dernier message: 30/11/2004, 10h12

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