根据输入的顺序排序,这个SQL应该怎么写??(100分)

  • 主题发起人 主题发起人 chonghai
  • 开始时间 开始时间
C

chonghai

Unregistered / Unconfirmed
GUEST, unregistred user!
我们知道,如果SQL语句后面没有ORDER BY的话,
那么查询出来的结果集会按照数据库自己的顺序来排列。
现在我在一个Memo里面输入查询选项
如:
456
789
123
……
查询语句 ……Where a='456' or a='789' or a='123'
希望出来的结果是
456 XXX ……
789 XXX ……
123 XXX ……
……
可是出来却是
123 XXX ……
456 XXX ……
789 XXX ……
……
也就是按照自己数据库的排列。
不知道各位大侠可有解决的方法,
我在这里先鞠躬谢谢了!
 
英语也好,汉字也罢,排序总有一定规则!你的Memo的数据没有规则,

查询数据要按没有规则的规则排序,可能么?反正我做不到!UP先!
 
条件是并列关系,怎会会按你写的顺序来排呢!
建议:
另外添一字段建索引!
456 XXX …… 1
789 XXX …… 2
123 XXX …… 3
 
……Where a='456' or a='789' or a='123'
order by a desc
按降序排列
 
agree SanDao
 
如果你非要实现这个目标的话,我可以提供关于你这个具体情况的解决办法:
可以建一个存储过程,在存储过程里建一个临时表,结构与查询出来的数据集结构相同。然后
将三个并列的条件分别一条一条的查询出来,插入临时表中。因为临时表中没有建索引,所以
自然就是你要的结果了。再然后“select * from 临时表” 就是你要的最终结果了。
 
michael.fly,如果单单的SQL语句无法实现,我也是准备这样做的,
不过这样子的做法对系统的资源占用很大,但是也没有办法就是了。
不知道是否其他人还有什么好的办法??
 
试一试
代码:
...where a='456'
union
...where a='678'
union 
..where a='123'
 
yvtong,你的方法好像不可行,我试了一下,好久都没有动静,速度之慢难以想象,
还没有等到结果出来,我就放弃了,呵呵。
看来只能是使用数据结果集重组了。
 
UP 看看还有其他的大侠出招吗?
 
在SQL Server 2000中可以这样:
select * ,'ord'=case a
when '456' then 1
when '789' then 2
when '123' then 3 end
from table where Where a='456' or a='789' or a='123'
order by 'ord'
 
sorry,多写了一个where !
 
tinyint的方法好,不过这种语法只有Sybase和M$ SQL Server才支持。
不过,有什么理由不用Order by吗?
 
你又没有脑子丫!重要的是思路,其他数据库只是换了个写法而已
 
多谢Tinyint,果然是好办法!!
我看了一下帮助说明,有这个语法,只是表达上有出入,但是不影响
您的答案的正确性,呵呵。
三人行,必我有师也!!
看来我要下功夫好好的学习SQL才是了!
 
TinyInt是不是可以给大家上上课,呵呵.
再次感谢各位!
 
多人接受答案了。
 
to 完颜康:
你疯狗啊?!动不动就骂人!这里是讨论问题的地方,我补充说明一下这种方法的限制有什么不好?
网上可以随便骂人的地方有的是,但不包括大富翁,想骂人就到别处去,这里不欢迎你!
谁不知道重要的是思路?好像世界上就你聪明,就你懂得“重要的是思路”似的?!
 
后退
顶部