51Testing软件测试论坛

标题: 请教sql语句 [打印本页]

作者: babysnail    时间: 2008-12-11 22:22
标题: 请教sql语句
请教:表如下,要求将每个框号相同的最小的两个槽位查找出来
框号  槽位
0          0
0          1
1          2
2          1
2          2
2          3
…    …
作者: smart55    时间: 2008-12-11 23:26
select top 2 min(槽位),框号 form 表 group by 框号

不知道对不对,仅供参考哈~
作者: puchonghui    时间: 2008-12-14 09:58
lz是想得到这样的结果么?
0          0
0          1
1          2
2          1
2          2


select * from tablename as t where 槽位 in(select top 2 槽位 from t where t.框号=框号 order by 槽位)
这个仅限于sqlserver
oracle 要用rownum伪列来做

貌似我以前问过类似的题目。。。
作者: babysnail    时间: 2009-1-5 15:36
多谢。。。
就是这样的。。。
作者: Nicle    时间: 2009-1-11 21:49
select top 2 槽位 from 表 group by 框号,槽位 order by 框号,槽位

这样也可以哦
作者: 木可    时间: 2009-2-27 15:29
5楼的答案看不懂,3楼的答案貌似有问题。当要将几张表连接在一起查询时,我们才会用where table1.主键=table2.外键
只有一张表的时候用 where where t.框号=框号 貌似还没见过。
我的答案是:
select 框位 from tablename as t where 槽位 in (select  top 2 槽位 from t order by 槽位)group by 框位

感觉是吧2楼的答案和三楼的答案综合在了一起~~~
作者: fflastjay    时间: 2009-3-5 17:15
难点在最小的2个数...
作者: fflastjay    时间: 2009-3-6 16:32
愚见:
2楼的 select top 2 min(槽位),框号 form 表 group by 框号
top 2 min好象没有这种用法

3楼的答案正确,
select * from tablename as t where 槽位 in(select top 2 槽位 from t where t.框号=框号 order by 槽位)
但是,我不知道2个表都命名T会不会产生误解,所以整理如下:
select * from tb  a where 槽位 in (select top 2 槽位 from tb b where a.框号=b.框号 order by 槽位)

用where a.xx = b.xx 和有几张数据表没有关系,关键看你的思路

所以3楼答案是对的,而且相信楼主也在sql里测试过了,我刚刚也在office access里测试过了

[ 本帖最后由 fflastjay 于 2009-3-6 16:35 编辑 ]
作者: kitty.xiong    时间: 2010-10-24 14:55
以上答案我都在oracle里验证了,怎么不对啊?楼上的可否详细解析一下啊,谢谢了!在oracle里怎么实现??
作者: fhqyygytjh    时间: 2010-11-26 18:08
ORACLE 实现的话可以用下面的语句:
SELECT *
  FROM table_name t1
WHERE t1.槽位 IN  (SELECT t2.槽位
                              FROM (SELECT * FROM table_name ORDER BY 1, 2) t2
                             WHERE t1.框号=t2.框号
                               AND ROWNUM <= 2)
ORDER BY 1, 2;




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2