Dans MS SQL Server 2005, j'écris une requête avec un tri conditionnel et mon problème est que je ne sais pas comment puis-je trier conditionnellement en utilisant deux colonnes?
Si j'ai écrit du code comme ça, ça fonctionne normalement
select
*
from
table
order by
case @pkr
when 'kol' then kol
when 'nci' then nci
end
Je ne sais pas comment effectuer une commande conditionnelle pour deux colonnes ou plus
select
*
from
table
order by
case @pkr
when 'KOL-NCI' then kol,nci
when 'kol-MPCI' then kol,mpci
end
Il y a une idée pour faire du TSQL dynamique et l'utiliser sp_executesql
mais je cherche toujours une meilleure idée?
sql-server
order-by
adopilot
la source
la source
CASE
peuvent s'appliquer à ce cas.Réponses:
J'admets que je n'ai jamais eu à le faire auparavant, donc il y a eu un peu de grattage de tête. Exemple de tableau simple pour démontrer:
En utilisant un paramètre @SortStyle pour différencier les ordres de tri, @SortStyle = 1 triera par
col1 ASC, col2 DESC
et @ SortStyle = 2 triera parcol2 DESC, col1 ASC
.Comment ORDER BY un paramètre couvre le cas le plus simple du tri par une seule colonne.
la source
En supposant que vous avez plus de cas (j'en ai ajouté un) et que tous les types sont compatibles,
Ce n'est pas un tri multi-colonnes: vous avez un tri primaire, suivi d'un tri secondaire. Regardez simplement la boîte de dialogue de tri dans Excel pour voir ce que je veux dire.
la source
Avec l'exemple que vous donnez, c'est simple:
Il est toujours agréable d'éviter autant que possible le SQL dynamique
la source