数据库排序语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库排序语句相关的知识,希望对你有一定的参考价值。

sql=" select B.File_ID,B.File_Name,case A.Look_Flag when '已看' then '' else A.Look_Flag end as 'FG',convert(char(10),A.Tdata,121) as 'td1' ";
sql+=" from PubInfor_Look_User A inner join PubInfor_File B ";
sql+=" on A.File_ID=B.File_ID order by File_ID desc where Look_User_ID=" + UserCode + " and Menu_ID=" + MID + " " ;在这句语句 哪个地方添加一句 可以把FIle_ID这个字段 按降序排列!

数据库的排序用order by语句实现。

工具:sqlserver 2008R2

步骤:

1、有如下学生表:

2、现要求按学号正序(由小到大)的顺序进行输出,语句如下:

select * from 学生 order by 学号

查询结果:

3、再要求按学号正序(由大到小)的顺序进行输出,语句如下:

select * from 学生 order by 学号 desc

结果:

参考技术A

在执行查询结果时,默认情况下查询结果无序排列。但我们有时需要对数据按一定规则进行排序。这时可以通过ORDER BY子句来实现这个功能。语法如下:

        SELECT <*,column [alias],...> FROM table

       [WHERE condition(s)]

       [ORDER BY column[ASC|DESC]];

默认是ASC指定的升序排列,DESC用来指定降序排列。

1、升序排序:

     使用ORDER BY子句时,默认情况下数据是按升序排列的,故可以用ASC关键字指点升序排列,或者不指定,默认就是升序,显示效果是一样的,如下图:

2、降序排序:

     当需要查询结果降序排列时,必须在排序后指定DESC关键字。如下图是查看职员薪水的降序排列:

参考技术B ORDER BY DESC 例如将所有学生按学号顺序降序排列;SELECT * FROM STUDENT ORDER BY DESC; 参考技术C sql=" select B.File_ID,B.File_Name,case A.Look_Flag when '已看' then '' else A.Look_Flag end as 'FG',convert(char(10),A.Tdata,121) as 'td1' ";
sql+=" from PubInfor_Look_User A inner join PubInfor_File B ";
sql+=" on A.File_ID=B.File_ID order by File_ID desc where Look_User_ID=" + UserCode + " and Menu_ID=" + MID + " " ; 再加一句:sql+="ORDER BY B.File_ID DESC";

sql排序语句问题

数据库表中现在有三个字段:name(string),num(int),flag(int),现在有若干条数据:
name num flag
a 10 0
b 3 0
a 2 1
c 4 0
d 5 1
b 2 1
现在需要按照相同的name所有num字段之和进行降序排列,如果之和最大,则其name num flag排在前面,且相同name的两行要连着,如下所示:
name num flag
a 10 0
a 2 1
b 3 0
b 2 1
d 5 1
c 4 0
其中a的两行num之和最大,排在第一二行,(不能将两行a分开,例如第一行是a,第二行是b,第三行是a),我写了这个sql:
select name, num, flag from table group by name, flag order by num,但这样输出就为:
name num flag
a 10 0
d 5 1
c 4 0
b 3 0
a 2 1
b 2 1
两行a被分开了,请问sql应该是什么思路来修改呢?比较着急,谢谢!
我是初学,能再介绍详细一点么?比如如何再进行排序呢?谢谢!
我已经得到
a 13
b 5
d 5
c 4
如何与原表join呢?

二楼的好像不行,提示:
错误 42X04:列“NUM”不在 FROM 列表的任何表中,或者它出现在 join 规范内但超出 join 规范的作用域,或者它出现在 HAVING 子句中但不在 GROUP BY 列表中。如果这是 CREATE 或 ALTER TABLE 语句,则“NUM”不是目标表中的列。

我写了left join的语句:
select city, num, flag from (select city, sum(num1+num2) as num, flag from ftb group by city, flag) t1 left join ftb on t1.city=ftb.city order by num;
总提示order by处有错,我的想法是让取出的
a 13
b 5
d 5
c 4这个表映射与原始表进行左连接比较,这样可以通过表映射中的排序来定义最后的排序,但还是不行啊?

二三楼兄弟的写法正确,但是与我这个sql要完成的功能不同,最后只是按照num和flag进行排序,但仍有可能出现同一个name的两行记录不相邻的情况。。。

先得到
a 13
b 5
d 5
c 4
这样的数据集,
然后再跟原来的数据集进行join, 用后得到的数据集进行排序。
参考技术A select name,num,flag from teacher
group by num,name,flag order by (num+flag ) desc

我做这样可以
不过不知道是不是这个意思
你试试
参考技术B select name, num,flag from table group by name,num,flag order by name asc,num desc

以上是关于数据库排序语句的主要内容,如果未能解决你的问题,请参考以下文章

sql语句 在分组内排序

sql排序语句问题

用SQL语句设置某个字段的排序方式

数据库排序语句

SQL语句检索数据排序及过滤

sql语句怎么按照字段1排序后再在本字段内按时间排序?