用SQL语句中的ORDER BY如何排序两个字段的联合结果?

时间:2021-03-24 02:49:18
数据库中有两个字段:日期、号码,每个月的号码开始都为1。我想用SQL的ORDER BY 实现排序,结果应为日期从小到大排序。每个月的号码也都为从小到大排序。应怎么办?

34 个解决方案

#1


select * from yourtable order by Date,No

#2


......Order By 日期,号码.....

#3


我试过了,不行。

#4


order by的默认值是升序,那按照楼上两位的意见就可以了

#5


我猜想你的方案是希望把相同月份的日期先集中起来,然后按日期升序排;然后在把所有的月份排起来是吧,如果你要这样做的,加一句 group by 号码试试

#6


这样的写法,排序结果是这样的:当日期相同时,再比较号码。所以日期是从小到大了,但号码没按顺序排

#7


同意楼上。

#8


select * from yourtable order by Date,cast(NO as int)

#9


(NO as int)这个参数是什么意思?

#10


强制类型转换,你先试试行不行,不行的话请你放一些范例数据上来让我测试一下。

#11


这个字段本来就是INT的

#12


关注!!

#13


group by 日期 order by 号码 ASC

#14


group by 日期 order by 号码 ASC

#15


我多此碰到这样的问题 ,问过但都没有解决

 如果一答案了,能转告一声么? 

 wenzmm

#16


wenzm@sina.com you

#17


这个方法不行

#18


不明白为什么:
select * from yourtable order by Date,No
不能用!
我想你的要求应该用上面这句就可以的!
你还是将你的一些例子数据送一些上来吧!
如:
//  Date          No      OtherField
// 2001-01-01     2          1
// 2001-04-01     1          2
// 2001-02-01     2          3
// 2001-02-01     1          4
// 2001-03-01     1          5
// 2001-01-01     1          6
用上面的SQL语句及数据其结果应该为:
// 2001-01-01     1          6
// 2001-01-01     2          1
// 2001-02-01     1          4
// 2001-02-01     2          3
// 2001-03-01     1          5
// 2001-04-01     1          2

你要求的结果是这样的吗?

#19


为什么N个空格只剩下一个了?奇怪,CSDN怎么搞的!

#20


对,我要的就是这个结果

#21


对,就是这个结果

#22


我测试过我的代码一点问题都没有,你是不是有什么其他地方没说明呀?

#23


我要的是liang_z(千山一刀之忍者神龟) 提供的结果。你看了吗?

#24


对了,在这个结果中,如果有一条日期为:2001-02-02 号码为 3的。那结果就不是我想要的,号码为3的会排在 2001-02-01 1 4  之后。而我是想每个月中号码都为最小开始。

#25


我给个例子吧:
排序前:
2002-02-02   8
2002-02-03  13
2002-01-06  13
2002-01-03   8
排序后应为:
2002-01-03   8
2002-01-06  13
2002-02-02   8
2002-02-03  13





#26


select * from yourtable order by 1,2

#27


例子错了,应为:
排序前: 
2002-02-02 8 
2002-02-03 13 
2002-01-06  8
2002-01-03 13 
排序后应为: 
2002-01-06 8 
2002-01-03 13 
2002-02-02 8 
2002-02-03 13 
同一个月内号码从小到大排

#28


你使用什么数据库?我在MS SQL SERVER 中完全没问题

#29


SELECT * from yourtable order by date desc,no asc

#30


日期不能倒序,我的排序规则是这样的:首先应按年+月正序排序,在每个月中以号码从小到大排序。所以这样排序的结果在日期中年和月肯定从小到大排序。但日期就不一定了。

#31


你的意思是date仅按月份排从小到大,号码也是从小到大
select * from yourtable order by left(date,7),no

在ms sql server 2000 通过

#32


我也测试过
在sql server 2000中完全没有问题的呀

#33


select * from ... order by convert(char(6),date,112),No

#34


这个我也试过了,没问题!
select * from ... order by convert(char(6),date,112),No

先对日期的YYYYMM部分排序,在些基础上再对No进行排序!

#1


select * from yourtable order by Date,No

#2


......Order By 日期,号码.....

#3


我试过了,不行。

#4


order by的默认值是升序,那按照楼上两位的意见就可以了

#5


我猜想你的方案是希望把相同月份的日期先集中起来,然后按日期升序排;然后在把所有的月份排起来是吧,如果你要这样做的,加一句 group by 号码试试

#6


这样的写法,排序结果是这样的:当日期相同时,再比较号码。所以日期是从小到大了,但号码没按顺序排

#7


同意楼上。

#8


select * from yourtable order by Date,cast(NO as int)

#9


(NO as int)这个参数是什么意思?

#10


强制类型转换,你先试试行不行,不行的话请你放一些范例数据上来让我测试一下。

#11


这个字段本来就是INT的

#12


关注!!

#13


group by 日期 order by 号码 ASC

#14


group by 日期 order by 号码 ASC

#15


我多此碰到这样的问题 ,问过但都没有解决

 如果一答案了,能转告一声么? 

 wenzmm

#16


wenzm@sina.com you

#17


这个方法不行

#18


不明白为什么:
select * from yourtable order by Date,No
不能用!
我想你的要求应该用上面这句就可以的!
你还是将你的一些例子数据送一些上来吧!
如:
//  Date          No      OtherField
// 2001-01-01     2          1
// 2001-04-01     1          2
// 2001-02-01     2          3
// 2001-02-01     1          4
// 2001-03-01     1          5
// 2001-01-01     1          6
用上面的SQL语句及数据其结果应该为:
// 2001-01-01     1          6
// 2001-01-01     2          1
// 2001-02-01     1          4
// 2001-02-01     2          3
// 2001-03-01     1          5
// 2001-04-01     1          2

你要求的结果是这样的吗?

#19


为什么N个空格只剩下一个了?奇怪,CSDN怎么搞的!

#20


对,我要的就是这个结果

#21


对,就是这个结果

#22


我测试过我的代码一点问题都没有,你是不是有什么其他地方没说明呀?

#23


我要的是liang_z(千山一刀之忍者神龟) 提供的结果。你看了吗?

#24


对了,在这个结果中,如果有一条日期为:2001-02-02 号码为 3的。那结果就不是我想要的,号码为3的会排在 2001-02-01 1 4  之后。而我是想每个月中号码都为最小开始。

#25


我给个例子吧:
排序前:
2002-02-02   8
2002-02-03  13
2002-01-06  13
2002-01-03   8
排序后应为:
2002-01-03   8
2002-01-06  13
2002-02-02   8
2002-02-03  13





#26


select * from yourtable order by 1,2

#27


例子错了,应为:
排序前: 
2002-02-02 8 
2002-02-03 13 
2002-01-06  8
2002-01-03 13 
排序后应为: 
2002-01-06 8 
2002-01-03 13 
2002-02-02 8 
2002-02-03 13 
同一个月内号码从小到大排

#28


你使用什么数据库?我在MS SQL SERVER 中完全没问题

#29


SELECT * from yourtable order by date desc,no asc

#30


日期不能倒序,我的排序规则是这样的:首先应按年+月正序排序,在每个月中以号码从小到大排序。所以这样排序的结果在日期中年和月肯定从小到大排序。但日期就不一定了。

#31


你的意思是date仅按月份排从小到大,号码也是从小到大
select * from yourtable order by left(date,7),no

在ms sql server 2000 通过

#32


我也测试过
在sql server 2000中完全没有问题的呀

#33


select * from ... order by convert(char(6),date,112),No

#34


这个我也试过了,没问题!
select * from ... order by convert(char(6),date,112),No

先对日期的YYYYMM部分排序,在些基础上再对No进行排序!