Trier par Dynamiquement, plusieurs champs

J'ai les déclarations suivantes dans une de mes requêtes SQL:

CASE WHEN @Ordering = 'asc' THEN YEAR(TimeIn) ASC, DATEPART(WEEK, TimeIn) ASC END, CASE WHEN @Ordering = 'desc' then YEAR(TimeIn) DESC, DATEPART(WEEK, TimeIn) DESC END 

mais je reçois une erreur:

Msg 156, niveau 15, état 1, ligne de procédure 43 [ligne de démarrage lot 4] Syntaxe incorrecte à proximité du mot key 'ASC'.

J'ai essayé de chercher des exemples, mais ils se rapportent tous à un domaine, et pas à plusieurs, comme j'essaie de le faire.

Quelqu'un peut-il conseiller comment je peux corriger ce qui précède s'il vous plaît?

Vous pouvez répéter le même CASE , la direction vient après la END du CASE :

 ORDER BY CASE WHEN @Ordering = 'asc' THEN YEAR(TimeIn) END ASC, CASE WHEN @Ordering = 'asc' THEN DATEPART(WEEK, TimeIn) END ASC, CASE WHEN @Ordering = 'desc' THEN YEAR(TimeIn) END DESC, CASE WHEN @Ordering = 'desc' THEN DATEPART(WEEK, TimeIn) END DESC 

que dis-tu de ça

 order by (CASE @Ordering when 'asc' then 1 when 'desc' then -1 else 0 end)*TimeIn ASC, (CASE @Ordering when 'asc' then 1 when 'desc' then -1 else 0 end)*DATEPART(WEEK, TimeIn) ASC 

Nous pouvons effectuer la même chose en peu de time, s'il vous plaît essayez-le:

 ORDER BY CASE WHEN @Ordering = 'asc' THEN CONCAT(YEAR(TimeIn),DATEPART(WEEK, TimeIn)) END ASC, CASE WHEN @Ordering = 'desc' THEN CONCAT(YEAR(TimeIn),DATEPART(WEEK, TimeIn)) END DESC 

Remarque: CONCAT peut être utilisé dans SQL Server> = 2012, dans la version inférieure, nous pouvons utiliser + à la place pour la concaténation.