クエリの順序を条件付きにしたいので、条件を満たしている場合は降順で並べ替える必要があります
例えば:
SELECT * FROM Data ORDER BY SortOrder CASE WHEN @Direction = 1 THEN DESC END
ASC
またはDESC
を変更しないでください。並べ替えられるものの符号を変更してください:
SELECT * FROM table
ORDER BY
CASE WHEN @Direction = 1 THEN -id else id END asc;
OPは尋ねます:
皆さん、私はSQLエキスパートではありません。idと-idの意味を説明してください。順序付けの方向を制御しますか?
idは、並べ替える列です。 -idは、その否定、id * -1です。複数の列で並べ替える場合は、各列を無効にする必要があります。
SELECT * FROM table
ORDER BY
CASE WHEN @Direction = 1 THEN -id else id END
CASE WHEN @Direction = 1 THEN -othercolumn else othercolumn END ;
数値以外の列で並べ替える場合は、その列を「負」にする式を見つける必要があります。それを行う関数を書くと役立つかもしれません。
SELECT *
FROM Data
ORDER BY
Case WHEN @Direction = 1 THEN SortOrder END DESC,
Case WHEN 1=1 THEN SortOrder END
すべての列タイプをサポートするスキームを使用することもできます。
SELECT <column_list> FROM <table> ORDER BY CASE WHEN @sort_order = 'ASC' AND @sort_column = '<column>' THEN <column> END ASC, CASE WHEN @sort_order = 'DESC' AND @sort_column = '<column>' THEN <column> END DESC
私はこのようなことをしました
select productId, InventoryCount,
case
when @Direction = 1 then InventoryCount
else -InventoryCount
end as "SortOrder"
order by 3