Tri des valeurs vides en dernier lieu au lieu de premier
Je suis en train de mettre en œuvre une procédure de tri qui va trier en fonction de la valeur d'une liste déroulante. Ce qui se passe est que lorsque la liste est triée, les champs NULL sera remplacé par la valeur de remplacement spécifiée, dans ce cas ''
. C'est être triés d'abord parce que nous sommes tri ascendingly, maintenant je voudrais trier ascendingly MAIS avec des valeurs null DERNIER. Comment pourrais-je mettre en œuvre?
ORDER BY l.IsActive DESC,
CASE WHEN @SortOrder = 1 THEN n.DisplayName
WHEN @SortOrder = 2 THEN CASE ec.IsEquipmentRelated
WHEN 1 THEN ISNULL(el.ShopID,'') +
ISNULL(ec.EquipmentAbbr,'') +
ISNULL(el.ClassSequenceNumber,'') +
ISNULL(el.EquipmentComponent,'') +
ISNULL(el.CompSequenceNumber,'')
WHEN 0 THEN ISNULL(ec.EquipmentAbbr,'')
ELSE NULL
END
ELSE l.DisplayName
END
Edit: en cours d'Exécution MS SQL Server 2008 /T-SQL
Edit: @Joe Stefanelli, j'ai essayé, c'est pas de la compilation:
ORDER BY l.IsActive DESC,
CASE WHEN @SortOrder = 0 THEN l.DisplayName
WHEN @SortOrder = 1 THEN CASE WHEN n.DisplayName = '' THEN 2 ELSE 1 END, n.DisplayName
WHEN @SortOrder = 2 THEN
CASE ec.IsEquipmentRelated
WHEN 1 THEN ISNULL(el.ShopID,'') +
ISNULL(ec.EquipmentAbbr,'') +
ISNULL(el.ClassSequenceNumber,'') +
ISNULL(el.EquipmentComponent,'') +
ISNULL(el.CompSequenceNumber,'')
WHEN 0 THEN ISNULL(ec.EquipmentAbbr,'')
ELSE NULL
END
END
source d'informationauteur JF Beaulieu
Vous devez vous connecter pour publier un commentaire.
Meilleure façon est d'ajouter une colonne dérivée qui aurait valeurs d'ordre de tri (CAS qui vérifie si l'autre colonne est null)) et de les ordonner en fonction de cette colonne.
Votre deuxième extrait de code ne compilera pas parce que vous essayez de revenir plus d'une valeur dans le
WHEN @SortOrder = 1
direction générale de la partie extérieure du BOÎTIER. Vous pourriez corriger si vous faites un couple de petits changements à ladite branche:Changement
2
et1
par exemple,'2'
et'1'
respectivement.Remplacer la virgule (
,
) avec l'opérateur de concaténation (+
).Et donc, résultant de la clause ORDER BY ressemblerait à ceci:
OK! J'ai trouvé un moyen de résoudre cela en utilisant tous les trois réponses combinées. +1 pour chaque réponse! Ce que j'ai fait est le premier à créer un "virtuel" de la colonne dérivée, en attribuant des valeurs null à 1 et les valeurs non null à 0, le tri, le tri le reste:
De cette façon, le tri des si un champ est null ou n'est pas fait avant le tri est fait, ce qui apporte les valeurs null à la fin.