请教sql语句
请教:表如下,要求将每个框号相同的最小的两个槽位查找出来框号槽位
0 0
0 1
1 2
2 1
2 2
2 3
… … select top 2 min(槽位),框号 form 表 group by 框号
不知道对不对,仅供参考哈~ 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伪列来做
貌似我以前问过类似的题目。。。:$ 多谢。。。
就是这样的。。。 select top 2 槽位 from 表 group by 框号,槽位 order by 框号,槽位
这样也可以哦:loveliness: 5楼的答案看不懂,3楼的答案貌似有问题。当要将几张表连接在一起查询时,我们才会用where table1.主键=table2.外键
只有一张表的时候用 where where t.框号=框号 貌似还没见过。
我的答案是:
select 框位 from tablename as t where 槽位 in (selecttop 2 槽位 from t order by 槽位)group by 框位
感觉是吧2楼的答案和三楼的答案综合在了一起~~~:lol 难点在最小的2个数... 愚见:
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 tba 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 编辑 ] 以上答案我都在oracle里验证了,怎么不对啊?楼上的可否详细解析一下啊,谢谢了!在oracle里怎么实现?? 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;
页:
[1]