Je veux sortinger le produit par remise à certaines conditions
ORDER BY CASE WHEN @OrderBy = 0 THEN table.id END ASC, CASE WHEN @Orderby = 2 THEN table.id END ASC,
Je veux faire quelque chose comme ci-dessous car je n'ai pas de colonne de réduction dans le tableau
CASE WHEN @OrderBy = 4 THEN (100-((table.price/table.oldprice)*100) as discount END ASC
mais il jette une erreur – comment puis-je sortinger par remise?
Il y a quelques problèmes, par exemple Vous ne pouvez pas alias un champ de calcul dans un ordre par, et vous aurez besoin d'échapper le nom de votre table, fixer le cae
, et countr les parenthèses.
Aussi, comme il semble que vous voulez juste CASE
sur une seule variable, vous pouvez déplacer le @OrderBy
vers le haut de la CASE, comme ceci:
SELECT * from [table] ORDER BY CASE @OrderBy WHEN 0 THEN [table].id -- ASC WHEN 2 THEN [table].id * -1 -- DESC ---I want to do something like below as I don't have discount column in table WHEN 4 THEN (100-([table].price/[table].oldprice)*100) END
SqlFiddle ici
En aparté, si vous avez besoin de changer dynamicment ASC
ou DESC
d'une colonne, vous pouvez utiliser un hack comme celui-ci en multipliant par -1.
(Notez aussi que ORDER BY CASE ... END ASC, CASE ... END ASC
va définir les premier et second ordres … cela ne semble pas logique étant donné que @OrderBy
ne peut avoir qu'une seule valeur)
Il me semble que vous avez besoin de quelque chose de similaire à cela
select * from TableName where someCondition >100 order by case when @OrderBy = 'AirlineService' then AirlineService END desc, case when @OrderBy = 'SomeMore' then MyOtherColumn end GO
Si vous n'avez pas de coulmn, vous ne pouvez pas sortinger avec ça. Veuillez lire ce lien Microsoft Veuillez garder à l'esprit: spécifie l'ordre de sorting utilisé pour les colonnes renvoyées dans une instruction SELECT. J'espère que cela aide.
Ne pas calculer la remise dans la clause ORDER BY
mais dans le SELECT
SELECT *, (100-(table.price/table.oldprice))*100 as discount FROM table
…
ORDER BY CASE WHEN @OrderBy = 0 THEN table.id END ASC, CASE when @orderby=2 THEN table.id END ASC, CASE WHEN @OrderBy = 4 THEN discount END ASC