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

MS SQL Server Discussion :

Clause Order by étrange


Sujet :

MS SQL Server

  1. #1
    Membre habitué

    Inscrit en
    Octobre 2002
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 139
    Points : 177
    Points
    177
    Par défaut Clause Order by étrange
    Bonjour à tous,

    voila je reprends le travail de qq1 sur sql server 2005 et dans une procédure stockée, je trouve la requete de sélection suivante :
    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
    SELECT      Customerkey       AS RefKey, 
                CompanyName       AS RefName, 
                MotherCompanyKey AS RefParentKey
    FROM dimCustomer
    WHERE CONTAINS(CompanyName, @CustomerString) 
    OR      CONTAINS(MotherCompanyName, @CustomerString)       
    OR    (CustomerKey IN 
                (SELECT MotherCompanyKey 
                FROM dimCustomer
                WHERE CONTAINS(CompanyName, @CustomerString)
                AND   MotherCompanyKey != 0))
    AND     InactiveFlag <> 0  
     
    ORDER BY CASE MotherCompanyKey 
                      WHEN 0 THEN CompanyName+convert(varchar, Customerkey)
                ELSE MotherCompanyName+convert(varchar, MotherCompanyKey) + CompanyName 
                      END
    Regardez bien la clause order by. Perso je la trouve bizarre, j'ai demandé autour de moi si qq1 la cmoprenait et ce n'est pas le cas.
    Je peux donner les résultats, ça ne marche pas (les resultats ne sont pas classés), mais ça ne plante pas non plus.
    Quelqu'un peut m'expliquer la clause? j'avoue que j'ai un peu de mal là....
    Merci d'avance.

    Krest

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    ORDER BY CASE MotherCompanyKey
    WHEN 0 THEN CompanyName+convert(varchar, Customerkey)
    ELSE MotherCompanyName+convert(varchar, MotherCompanyKey) + CompanyName
    END
    cela signifie que tu tries sur une valeur égale a "CompanyName+convert(varchar, Customerkey)" si MotherCompanyKey =0 ou sur une valeur égale a "MotherCompanyName+convert(varchar, MotherCompanyKey) + CompanyName " si MotherCompanyKey <>0

    exemple de valeurs dans ta table:

    Customerkey MotherCompanyKey MotherCompanyName CompanyName
    10 0 tt tt
    20 1 toto tutu
    30 1 titi tutu

    ton tri donnera

    10 0 tt tt
    30 1 titi tutu
    20 1 toto tutu

  3. #3
    Membre habitué

    Inscrit en
    Octobre 2002
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 139
    Points : 177
    Points
    177
    Par défaut
    Merci,

    En fait le '+' correspond au caractère ',' qui serait utilisé s'il n'y avait pas de . C'est ça?

    Krest

  4. #4
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    si tu veux..

    mais surtout, cela permet de faire des tris malgré les cas ou une des données serait nulle par exemple

    dans ton cas cela doit avoir lieu lorsque MotherCompanyKey=0 ton MotherCompanyName doit être null

    A+

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

Discussions similaires

  1. [10gR2] Problème étrange de performances avec clause "ORDER BY"
    Par StringBuilder dans le forum SQL
    Réponses: 4
    Dernier message: 04/06/2014, 14h26
  2. Clause order by pour requête sur DB2
    Par Clotilde dans le forum Langage SQL
    Réponses: 3
    Dernier message: 19/01/2006, 10h21
  3. [SQL Server 8] La clause order by
    Par Baquardie dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/01/2006, 22h58
  4. Pb avec la clause ORDER BY...
    Par Karibou dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 16/08/2005, 14h48
  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