Sql按学生排序

时间:2015-08-04 18:35:34

标签: mysql sql-server database

我想订购我的数据,我有以下数据。

以下是我的数据

 - 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

3 个答案:

答案 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

SQL Fiddle

中的示例