Office中国论坛/Access中国论坛

标题: 出一个查询题目让大家练练(自定义排序)。 [打印本页]

作者: wuaza    时间: 2006-5-13 18:40
标题: 出一个查询题目让大家练练(自定义排序)。
SELECT * FROM table WHERE id in (13,5,9,3)

以上查询语句,如何让结果按照WHERE ID in(...) ←括号里的顺序进行排序?

即出来的查询集按id值13,5,9,3的顺序排序。

题目要求:

1、不能通过辅助表、临时表。

2、一条语句完成。

答案将于5月15日公布!

[此贴子已经被一点通于2006-5-13 19:52:40编辑过]


作者: LucasLynn    时间: 2006-5-13 18:52

SELECT 1,* FROM table1 WHERE id =3
UNION SELECT 2,* FROM table1 WHERE id =5
UNION SELECT 3,* FROM table1 WHERE id =9
UNION SELECT 4,* FROM table1 WHERE id =1;

[此贴子已经被作者于2006-5-13 10:52:50编辑过]


作者: wuaza    时间: 2006-5-13 18:56
用联合查询虽然结果正确,但并非最优解。

谢谢版主。
作者: LucasLynn    时间: 2006-5-13 19:36
以下是引用wuaza在2006-5-13 10:56:00的发言:


用联合查询虽然结果正确,但并非最优解。

谢谢版主。



纯属抛砖引玉,期待更好的方法。
作者: eyewitnes    时间: 2006-5-13 19:50
以下是引用wuaza在2006-5-13 10:40:00的发言:


SELECT * FROM table WHERE id in (13,5,9,3)

以上查询语句,如何让结果按照WHERE ID in(...) ←括号里的顺序进行排序?

即出来的查询集按id值13,5,9,3的顺序排序。

题目要求:

1、不能通过辅助表、临时表。

2、一条语句完成。

答案将于5月15日公布!

不知道你的id in (...) 括号里面有多少,所以不一定适合

select * from table where id in (13,5,9,3) order by iif(id=13,1,iif(id=5,2,iif(id=9,3,4)))
作者: wuaza    时间: 2006-5-13 20:11
in (...) 括号里的id不多的话,楼上答案算一个。(不知道iif最多嵌套几层?但超过四层的话用起来总是不爽)

越来越接近我的答案了。不知道我自认为的“正确”答案算不算最好。

说实话,这个题目我也是从别人那里学来的。让我自己也想不出来。[em01]
作者: LucasLynn    时间: 2006-5-13 20:13

SELECT * FROM 表1
WHERE id In (13,5,9,3)
ORDER BY InStr(",13,5,9,3,","," & id & ",");

[此贴子已经被作者于2006-5-13 12:14:47编辑过]


作者: wuaza    时间: 2006-5-13 20:23
高手就是高手,不得不佩服!

本题正确答案已有LucasLynn版主给出,竞答圆满结束。
作者: dog3894    时间: 2006-5-13 22:53
hao dong si
作者: dog3894    时间: 2006-5-13 22:53
fei chang hao a
作者: dog3894    时间: 2006-5-13 22:53
mei shen mie hao shguo le
作者: eyewitnes    时间: 2006-5-13 23:30
原来instr可以这样用,学了一招
作者: LucasLynn    时间: 2006-5-14 00:23
以下是引用wuaza在2006-5-13 12:23:00的发言:


高手就是高手,不得不佩服!

本题正确答案已有LucasLynn版主给出,竞答圆满结束。



确实很有启发性,我自己也是想了半天,以后遇到类似问题就知道怎么解决了。





作者: andymark    时间: 2006-5-14 00:33
学习...
作者: 一点通    时间: 2006-5-14 03:55
这样的自定义排序确实有用途
作者: qlm    时间: 2006-9-6 03:49
要先懂这个才能看懂答案:

InStr 函数











返回 Variant (Long) 值,该值指定一个字符串在另一个字符串中第一次出现时的位置。

语法

InStr([start, ]string1, string2[, compare])

InStr 函数语法具有以下参数:
作者: chaojianan    时间: 2009-4-19 16:34
真是高手。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3