【发布时间】:2018-08-06 11:02:24
【问题描述】:
我选择了这个建筑楼层数据:
6
5
4
3
2
1
UG
GM
G
LG
5B
5A
B1
B2
对于这种排序,我使用这种排序方式:
order by
(case when ISNUMERIC(floorNo) = 1 then CAST(floorNo AS Int) end) desc ,
(case when ISNUMERIC(left(floorNo,1)) = 0 and ISNUMERIC(substring(floorNo,2,1)) = 1 then floorNo end) asc,
(case when ISNUMERIC(floorNo) = 0 and left(floorNo,1) <>'L' then floorNo end) desc
但我想变成这样:
6
5B
5A
5
4
3
2
1
UG
GM
G
LG
B1
B2
谁能帮我解决一下?
【问题讨论】:
-
列中同时存在数字和字符数据将使在 SQL Server 中生成这种排序顺序变得非常困难。最好的办法可能是为数字和文本组件设置单独的列。
-
另外,楼层名称也因人而异,例如GM可能是GF等。从技术上讲,没有任何逻辑可以工作。另外,由于子句的顺序,您的查询会变慢。所以请保留单独的数字列。