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.