MS Sql:有条件的按ASC / DESC排序的问题
技术问答
183 人阅读
|
0 人回复
|
2023-09-14
|
我想使查询中的排序成为条件排序,因此,如果满足条件,则应通过降序排序
2 H$ A+ t/ Z- U1 B例如:
9 _$ E3 U( o$ ~! h( n7 @! R6 b1 x: mSELECT * FROM Data ORDER BY SortOrder CASE WHEN @Direction = 1 THEN DESC END
% L, G9 s4 }! P" k$ l- g ( e, o0 k+ @/ h$ o- z; F% f
解决方案:9 ]% b, `5 [0 j/ E7 A; R# y y
- x/ h. P2 t k8 L y
' w/ G7 O3 o. O+ {1 }
6 B- q* c2 u/ { G& U 请勿更改ASC或DESC,更改要排序的事物的符号:
; s' h1 j# D, o! }SELECT * FROM table ( c2 y! j$ o, f9 x5 W
ORDER BY 4 b/ x4 D! N* E5 c4 }5 Z8 |
CASE WHEN @Direction = 1 THEN -id else id END asc;; U* I0 K5 m5 y" p5 ^9 y2 F
OP问:
2 l% h7 ?+ B% q$ R/ }- Y+ W- ~0 ^ ~; t& ^% H6 D
伙计们,我不是SQL Expert,请向我解释一下id和-id的含义,它可以控制排序方向吗?$ Z6 x: r5 h8 V& |' z E
0 T) p0 O5 P {& }
id就是您要作为排序依据的任何列;-id只是对它的取反,id * -1。如果要按不止一列进行排序,则需要取反每一列:1 @9 f/ z5 r9 b e* T* A
SELECT * FROM table
" P- {& ~# Y$ a% s+ O7 k; ^ORDER BY
, y2 ]8 m& n+ L' T' JCASE WHEN @Direction = 1 THEN -id else id END 0 [3 c4 m# h8 x7 E- V+ p
CASE WHEN @Direction = 1 THEN -othercolumn else othercolumn END ;
" |0 e7 I" d( j M8 p" b( }如果按非数字列排序,则需要查找使该列为“负”的表达式;编写一个函数来这样做可能会有所帮助。 |
|
|
|
|
|