Shi*_*mmy 25 sql sql-server sql-order-by
我想使我的查询中的排序有条件,所以如果它满足条件它应该通过降序排序
例如:
SELECT * FROM Data ORDER BY SortOrder CASE WHEN @Direction = 1 THEN DESC END
tpd*_*pdi 38
不要更改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 ;
如果您使用非数字列进行排序,则需要找到使该列"为负"的表达式; 写一个功能来做到这一点可能有所帮助.
小智 10
SELECT * 
FROM Data 
ORDER BY 
Case WHEN @Direction = 1 THEN SortOrder END DESC, 
Case WHEN 1=1 THEN SortOrder END
小智 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