Shi*_*mmy 25 sql sql-server sql-order-by
我想使我的查询中的排序有条件,所以如果它满足条件它应该通过降序排序
例如:
SELECT * FROM Data ORDER BY SortOrder CASE WHEN @Direction = 1 THEN DESC END
Run Code Online (Sandbox Code Playgroud)
tpd*_*pdi 38
不要更改ASC
或DESC
更改正在排序的东西的符号:
SELECT * FROM table
ORDER BY
CASE WHEN @Direction = 1 THEN -id else id END asc;
Run Code Online (Sandbox Code Playgroud)
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 ;
Run Code Online (Sandbox Code Playgroud)
如果您使用非数字列进行排序,则需要找到使该列"为负"的表达式; 写一个功能来做到这一点可能有所帮助.
小智 10
SELECT *
FROM Data
ORDER BY
Case WHEN @Direction = 1 THEN SortOrder END DESC,
Case WHEN 1=1 THEN SortOrder END
Run Code Online (Sandbox Code Playgroud)
小智 8
您还可以使用支持所有列类型的方案:
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