Rédaction d'une procédure stockée dans MS SQL Server 2008 R2, je veux éviter d'utiliser DSQL ...ORDER conditionnelle SQL PAR ASC/DESC pour les colonnes alpha
Je voudrais la méthode de tri (ASC ou DESC) être conditionnel.
Maintenant, avec une colonne numérique, je voudrais simplement utiliser une déclaration de cas et annuler la valeur à imiter ASC ou DESC ... Ce est:
... ORDER BY CASE @OrderAscOrDesc WHEN 0 THEN [NumericColumn] ELSE -[NumericColumn] END ASC
Quelle est une méthode appropriée pour le faire avec un colonne alpha?
EDIT: J'ai pensé d'une manière intelligente, mais il semble terriblement inefficace ... Je pourrais insérer ma colonne alpha ordonnée dans une table temporaire avec un autonumber, puis trier par le numéro automatique en utilisant la méthode décrite ci-dessus.
EDIT2:
Qu'est-ce que vous les gars pensent de cette approche?
ORDER BY CASE @OrderAscOrDesc WHEN 0 THEN [AlphaColumn] ELSE '' END ASC,
CASE @OrderAscOrDesc WHEN 0 THEN '' ELSE [AlphaColumn] END DESC
Je ne sais pas si forcer une sorte sur une colonne uniforme est plus efficace que le nombre de chaînes provenant triées si
intelligent, assez semblable à ma solution que j'ai posté dans l'édition. J'espère que quelque chose de plus efficace que de dériver une autre copie triée des données juste pour produire un ordre de tri numérique .... – Matthew
@Matthew PK: soit vous devez substituer la chaîne pour un nombre correspondant, ou ajouter des tris fictifs pour non Cas pertinents Rien d'autre * vraiment * intelligent j'ai peur – gbn
Que penses-tu de l'approche "deux ORDER BY" dans mon deuxième montage? – Matthew