按订单查询

时间:2016-08-11 08:00:59

标签: sql sql-server database

表:学生

  ID    Name    Marks
    1   Ashley   81
    2   Samantha 75
    4   Julia    76
    3   Belvet   84

要返回标记大于75的名称的查询,输出将按每个名称的最后三个字符排序,如果是tie,则按升序ID排序。

我的查询: -

  Select Name 
    From Students 
   Where Marks > 75
Order By (Select Substring(Name,1,2))

到目前为止我尝试了这个,我试图找出order by,但这是错误的。我怎么能完成它?

5 个答案:

答案 0 :(得分:4)

 <!DOCTYPE html>
   <html ng-app="demo">
    <head>
       <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.7/angular.min.js"></script>
       <script src="https://code.angularjs.org/1.4.6/angular-route.js"></script>
    </head>
    <body>
      <a href="#linkOne">Link One</a>
      <a href="#linkTwo">Link Two</a>

      <div ng-view></div>
    </body>
   </html>

你也可以使用:

SELECT Name
FROM Students 
WHERE Marks > 75
ORDER BY RIGHT(Name, 3),
         ID

作为替代方案。

答案 1 :(得分:2)

SELECT子句中不需要ORDER BY。并且通过 last 排序三个字符而不是 first 使用它:

SELECT Name
FROM Students 
WHERE Marks > 75
ORDER BY RIGHT(Name, 3), ID

要按ID订购关联,只需添加ID作为第二个ORDER参数。

答案 2 :(得分:1)

SELECT Name 
FROM Students 
WHERE Marks > 75
ORDER BY substring(Name, LEN(Name)-2, 3), ID

答案 3 :(得分:0)

以下是您需要的部分。按顺序排序,然后是id。

select substring('THENAME', LENGTH('THENAME')-2, 3)

整个代码:

Select Name from Students 
where Marks > 75
order by (Substring(Name,LENGTH(Name)-2,3)), Id

答案 4 :(得分:-2)

在sql中创建此函数:

Alter function dbo.getlastthreechar (@s varchar(256)) returns varchar(3)
   with schemabinding<
begin
   if @s is null
      return null
   declare @s2 varchar(256)
   set @s2 = ''
   set @s2 = RIGHT(@s,3)
   if len(@s2) = 0
      return null
   return @s2
   end

然后你会查询:

Select Name from Students where Marks > 75 order by dbo.getlastthreechar(Name )