新手请教条oracle下的sql查询语句

newbieeee 2009-12-27 02:18:33
表info的基本结构和数据如下,其中sid(小类)和bid(大类)有从属关系,即sid相同的bid必定相同
ID CONTENT BID SID
-----------------------------------
1 1 内容1 1 1
2 2 内容2 1 1
3 3 内容3 1 2
4 4 内容4 2 3
5 5 内容5 1 4
6 6 内容6 2 3
7 7 内容7 2 5

按以下条件查询,sid相同的只显示一条,bid相同的靠在一起,即希望的结果如下

ID CONTENT BID SID
-----------------------------------
1 1 内容1 1 1
2 3 内容3 1 2
3 5 内容5 1 4
4 4 内容4 2 3
5 7 内容7 2 5

请问应该如何写sql语句?对oracle不熟,请各位指教了,多谢;


测试数据对应的SQL语句
create table info(id varchar(5), content varchar(100), bid varchar(5), sid varchar(5));
insert into info values('1', '内容1', '1', '1');
insert into info values('2', '内容2', '1', '1');
insert into info values('3', '内容3', '1', '2');
insert into info values('4', '内容4', '2', '3');
insert into info values('5', '内容5', '1', '4');
insert into info values('6', '内容6', '2', '3');
insert into info values('7', '内容7', '2', '5');


...全文
122 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
newbieeee 2009-12-29
  • 打赏
  • 举报
回复
多谢各位的热心回复了。结贴
lixinbill 2009-12-28
  • 打赏
  • 举报
回复
select * from
(select t.*, row_number() over(partition by bid,sid order by id) rn from info t)
where rn = 1
order by bid;
wh62592855 2009-12-27
  • 打赏
  • 举报
回复
shiyiwan 2009-12-27
  • 打赏
  • 举报
回复
#6

可以的,我写的太多了,呵呵

wh62592855 2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 shiyiwan 的回复:]
select * from
(select t.*, row_number() over(partition by bid,sid order by id) rn from info t)
where rn = 1
order by bid;
[/Quote]只partition by sid行不行呢
dawugui 2009-12-27
  • 打赏
  • 举报
回复
SELECT T.* FROM INFO T WHERE ID = (SELECT MIN(ID) FROM INFO WHERE sid = T.sid) ORDER BY T.BID

SELECT T.* FROM INFO T WHERE NOT EXISTS (SELECT MIN(ID) FROM INFO WHERE sid = T.sid AND ID < T.ID ) ORDER BY T.BID
ACMAIN_CHM 2009-12-27
  • 打赏
  • 举报
回复
select rownum,CONTENT,BID,SID
from info a
where not exists (select 1
from info
where SID=a.SID and ID<a.ID)
order by id
samonchang 2009-12-27
  • 打赏
  • 举报
回复
xue xi lee
zhangwonderful 2009-12-27
  • 打赏
  • 举报
回复
1楼方法可行
shiyiwan 2009-12-27
  • 打赏
  • 举报
回复
select * from
(select t.*, row_number() over(partition by bid,sid order by id) rn from info t)
where rn = 1
order by bid;

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧