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 :

ORDER BY avec une enum


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Par défaut ORDER BY avec une enum
    J'ai une table a afficher dans un ordre particulier, mais impossible de trouver la moindre colonne qui peut me permettre d'arriver à cet ordre.
    est-ce qu'il y aurait une fonctionnalité du genre :
    "ordonner en utilisant une colonne en respectant l'ordre de l'énumération suivante".
    exemple : ma table c'est ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TABLE [dbo].[maTable] (
    	[ID] [int] IDENTITY (1, 1) NOT NULL ,
    	[IDCode] [int] NOT NULL ,
    	[Designation] [varchar] (50) COLLATE French_CI_AS NOT NULL ,
    ) ON [PRIMARY]
    les valeurs dans ma table sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT INTO maTable(IDCode, Designation) VALUES ('1', 'Directeur General')
    INSERT INTO maTable(IDCode, Designation) VALUES ('2', 'PDG')
    INSERT INTO maTable(IDCode, Designation) VALUES ('3', 'Chef de Service')
    INSERT INTO maTable(IDCode, Designation) VALUES ('4', 'manar')
    mon SELECT aurait la gueule suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Designation 
    FROM maTable
    ORDER BY IDCode {2,1,3,4}
    pour obtenir l'ordre suivant : PDG, Directeur General, Chef de Service, manar...
    Bien sur si je pouvais ordonner les IDCode ça aurait été + facile, mais ce sont des codes imposés par le client et impossible de les changer...

    je trouve pas, Help please...

  2. #2
    Membre expérimenté Avatar de Cpas2latarte
    Inscrit en
    Janvier 2006
    Messages
    237
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 237
    Par défaut
    Le principe : tu ajoute une colonne (virtuellement ou phisiquement) pour trier selon l'ordre que tu veux
    Cette colonne peut être physique, (affecté automatiquement lors de l'insertion), virtuel (calculé)
    tu peux aussi utiliser une clause case when pour ajouter une colonne de tri lors de la requête ex :
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT Designation , 
       Case IDCode 
        When 1 then 200
        When 2 Then 100
        When 3 Then 300
        When 4 Then 400
        Else 500 End OrdreTri
    FROM maTable
    ORDER BY OrdreTri
    Remarque j'utilise des valeur multiple de 100 car c'est plus simple si ultérieurement je dois insérer des elements dont l'ordre est intercallé (ex id 6 ->250)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Par défaut
    c pas con !
    je vais essayer...
    il faut que j'integre ça à une SP beaucoup + lourde sur une Base très chargée. j'espère que ça va passer... au niveau Time-Out

  4. #4
    Membre expérimenté Avatar de Cpas2latarte
    Inscrit en
    Janvier 2006
    Messages
    237
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 237
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    l faut que j'integre ça à une SP beaucoup + lourde sur une Base très chargée. j'espère que ça va passer... au niveau Time-Out
    TimeOUt si besoin tu peux l'augmenter

    Si ta base est grosse, ben tu peux toujours ajouter une colonne physique ou calculé contenant cette valeur de tri

    Une fois cette colonne en place, tu peux l'indexe.

    Autre solution, tu peux créer une vue avec la requête, et idem tu peux indexer une colonne de ta vue.

    a toi de jouer

Discussions similaires

  1. Classe générique avec une Enum
    Par Galevsky dans le forum Langage
    Réponses: 5
    Dernier message: 12/09/2012, 11h15
  2. @DiscriminatorValue avec une Enum
    Par fabou3377 dans le forum JPA
    Réponses: 2
    Dernier message: 23/05/2010, 16h06
  3. Charger une dataTable avec une Enum
    Par zooffy dans le forum ASP.NET
    Réponses: 21
    Dernier message: 03/05/2010, 14h40
  4. ORDER BY avec une condition
    Par _Melisse_ dans le forum Requêtes
    Réponses: 2
    Dernier message: 14/12/2007, 18h00

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