我想订购我的数据,我有以下数据。
以下是我的数据
- 1
- 1+
- 1-
- 2
- 2+
- 2-
- 3
- 3+
- 3-
- 4
- 4+
- 4-
我想这样订购:
- 1+
- 1
- 1-
- 2+
- 2
- 2-
- 3+
- 3
- 3-
- 4+
- 4
- 4-
我尝试了这个,但是我没有得到我想要的结果
select * from RatingGrade
where ScoreCardID=1
order by GradeNo
答案 0 :(得分:6)
试试这个:
select * from RatingGrade where ScoreCardID=1
order by GradeNo + ','
修改强>
如何运作
是的,正如人们指出这是一个棘手而棘手的解决方案。
有时只是开箱即用。在这里,我只是查看了ascii图表。 +
小于-
。所以这两个的顺序是整理出来的。接下来我需要的是一个介于这两个之间的角色,即,
。这解释了它是如何工作的。
在工作中解决ASCII值:
43 + (plus)
44 , (comma)
45 - (hyphen)
48-57 numbers 0 to 9.
首先比较第一个字符,这是一个数字。由于它们对于集合是相同的,因此比较第二个字符。这可以是+或 - 或,。所以它们按ascii顺序排序。由于订单在此阶段得到解决,因此无需比较第三个字符。
答案 1 :(得分:2)
您可以使用substr来获取字符串的一部分。这允许您先按第一个字符排序,然后按第二个字符排序:
select * from RatingGrade
where ScoreCardID=1
order by
substring(GradeNo, 1, 1),
case substring(GradeNo, 2, 1)
when '+' then 'A'
when '-' then 'C'
else 'B'
end
-edit-将substr
更改为substring
,这应该适用于MySQL和SQL Server。
答案 2 :(得分:0)
这应该有效,它假设数字在1到9之间:
select * from RatingGrade
order by
convert(int, left(GradeNo, 1)),
case right(GradeNo,1) when '+' then 1 when '-' then 3 else 2 end
中的示例