传入@OrderBy int,其中正数是ASC,负数是DESC,实际数字是要排序的列
SELECt dt.yourColumn1 ,dt.yourColumn2 ,dt.yourColumn3 ,CASE WHEN @OrderBy>0 THEN dt.SortBy ELSE NULL END AS SortByAsc ,CASE WHEN @OrderBy<0 THEN dt.SortBy ELSE NULL END AS SortByDesc FROM (SELECt yourColumn1 ,yourColumn2 ,yourColumn3 ,CASEWHEN ABS(@OrderBy) = 1 THEN surnameWHEN ABS(@OrderBy) = 2 THEN forenameWHEN ABS(@OrderBy) = 3 THEN fullNameWHEN ABS(@OrderBy) = 4 THEN ConVERT(varchar(10),userId)WHEN ABS(@OrderBy) = 5 THEN ConVERT(varchar(10),MobileNumberWHEN ABS(@OrderBy) = 6 THEN DeviceStatusWHEN ABS(@OrderBy) = 7 THEN LastPositionWHEN ABS(@OrderBy) = 8 THEN ConVERT(varchar(23),Lastalert,121)WHEN ABS(@OrderBy) = 9 THEN ConVERT(varchar(23),LastCommunication,121)WHEN ABS(@OrderBy) =10 THEN ConVERT(varchar(23),LastPrealert,121)ELSE NULL END AS SortBy FROM YourTablesHere WHERe X=Y ) dt ORDER BY SortByAsc ASC, SortByDesc DESC
只需确保您构建的字符串能够正确排序,请注意,我使用’YYYY-MM-DD
hh:mm:ss.mmm’作为日期,并将数字放入字符串中。我们通常将多个列放在一起,因此,如果您按姓氏排序,也使用姓氏,等等。请注意,如果您合并多个列,则需要用零或空格填充。
如果您不希望将SortByAsc和SortByDesc列包含在结果集中,请将整个内容包装在派生表中。



