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

Langage SQL Discussion :

[SQL Server 8] La clause order by


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Points : 144
    Points
    144
    Par défaut [SQL Server 8] La clause order by
    Bonjour les amis

    Je développe une application VB6 sous SQL Server 2000.

    Je me demande pourquoi, lorsque j'exécute cette requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select distinct rtrim(mqltmq) as type, rtrim(mqldsf) as Description, rtrim(mqldsa) as DescriptionA
    from repartsku
    	join lassonde.dbo.iim on (noproduit = iprod) 
    	join lassonde.dbo.limq on (imarqu = mqmarq)
    	join lassonde.dbo.ltmq on (mqltmq = mqtype)
    where annee = 2006 and semaine = 2 
    order by mqldsf
    Je recois le message d'erreur suivant

    Server: Msg 145, Level 15, State 1, Line 1
    ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
    alors que si je modifie ma clause order by par ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select distinct rtrim(mqltmq) as type, rtrim(mqldsf) as Description, rtrim(mqldsa) as DescriptionA
    from repartsku
    	join lassonde.dbo.iim on (noproduit = iprod) 
    	join lassonde.dbo.limq on (imarqu = mqmarq)
    	join lassonde.dbo.ltmq on (mqltmq = mqtype)
    where annee = 2006 and semaine = 2 
    order by 2
    Cela fonctionne parfaitement....

    Pour l'instant, j'ai utilisé la 2e méthode, mais je ne comprend pas pourquoi lorsque je nomme la colonne cela ne fonctionne pas.... Je ne comprend pas l'erreur, puisque mon champ du order by apparaît bel et bien dans mon select....

    Merci beaucoup

  2. #2
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    rtrim(mqldsf) as Description
    Ben tu le renommes alors pourquoi ne fais tu pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    order by Description
    à la place de


  3. #3
    Membre habitué Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Points : 144
    Points
    144
    Par défaut
    Euh

    Excellente question!

    Je préfère toujours travailler avec les noms de champ d'origine, et non pas les alias. C'est bien la première fois que cela me cause problème.

    Effectivement si je fais un order by sur l'alias du nom du champ, cela fonctionne...

    Et je viens d'essayer autre chose, si j'enlève la fonction rtrim, je peux utiliser le nom du champ pour faire le order by...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select distinct rtrim(mqltmq) as type, mqldsf as Description, rtrim(mqldsa) as DescriptionA
    from repartsku
       join lassonde.dbo.iim on (noproduit = iprod)
       join lassonde.dbo.limq on (imarqu = mqmarq)
       join lassonde.dbo.ltmq on (mqltmq = mqtype)
    where annee = 2006 and semaine = 2
    order by mqldsf
    Comme si, à cause de l'utilisation de la fonction, le champ perdait son nom en cours de route.

    Je trouve cela d'autant plus weirdo, que si j'utilise la fonction rtrim sans mettre d'alias à mon champ, je n'ai plus de moyen de trier sur ce champ à part en utilisant les valeurs numériques.

    Eh bien je viens d'en apprendre encore!

    Merci beaucoup

  4. #4
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    En fait tu aurais même pu faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    order by rtrim(mqldsf)

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

Discussions similaires

  1. Order by, top(100) Percent et vue dans SQL server 2005
    Par NicoNGRI dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 30/04/2009, 16h33
  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. [SQL] clause order by
    Par GMI3 dans le forum SQL
    Réponses: 4
    Dernier message: 16/05/2007, 11h56
  4. 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
  5. ORDER BY d'un type ntext sql server 2005
    Par charabia dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 16/02/2006, 07h37

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