oracle分组问题

lhj821130 2010-01-08 10:32:24
各位好:
现有一问题:表中有三个字段col1,col2,col3,col1是序列字段,现在要根据col2和col3做分组,无解,求助!
例:t_table:
col1 col2 col3
1 A 1
2 A 1
3 B 1
4 B 1
5 C 2
6 C 2
7 A 1
8 A 2
9 B 2
10 B 2
需要将以上表记录分组成:
col1 col2 col3
2 A 1
4 B 1
6 C 2
7 A 1
8 A 2
10 B 2
求解???
...全文
146 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhj821130 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 userzh 的回复:]
试写了一下,下面这个好像可以,不知道是不是符合你的要求.

create table ZH
(
  COL1 NUMBER,
  COL2 VARCHAR2(10),
  COL3 VARCHAR2(10)
);
insert into zh (COL1, COL2, COL3)
values (5, 'C', '2');

insert into zh (COL1, COL2, COL3)
values (4, 'B', '1');

insert into zh (COL1, COL2, COL3)
values (3, 'B', '1');

insert into zh (COL1, COL2, COL3)
values (2, 'A', '1');

insert into zh (COL1, COL2, COL3)
values (1, 'A', '1');

insert into zh (COL1, COL2, COL3)
values (6, 'C', '2');

insert into zh (COL1, COL2, COL3)
values (7, 'A', '1');

insert into zh (COL1, COL2, COL3)
values (8, 'A', '2');

insert into zh (COL1, COL2, COL3)
values (9, 'B', '2');

insert into zh (COL1, COL2, COL3)
values (10, 'B', '2');

select * from zh;
select col1,col2,col3 from (
select b.*,
case when (col2=(select col2 from zh a where a.col1 =b.col1+1) and col3=(select col3 from zh a where a.col1 =b.col1+1) ) then 1 end bz
from zh b order by col1) where bz is null;

[/Quote]

感谢这位仁兄!就是要这个结果!!!
userzh 2010-01-08
  • 打赏
  • 举报
回复
试写了一下,下面这个好像可以,不知道是不是符合你的要求.

create table ZH
(
COL1 NUMBER,
COL2 VARCHAR2(10),
COL3 VARCHAR2(10)
);
insert into zh (COL1, COL2, COL3)
values (5, 'C', '2');

insert into zh (COL1, COL2, COL3)
values (4, 'B', '1');

insert into zh (COL1, COL2, COL3)
values (3, 'B', '1');

insert into zh (COL1, COL2, COL3)
values (2, 'A', '1');

insert into zh (COL1, COL2, COL3)
values (1, 'A', '1');

insert into zh (COL1, COL2, COL3)
values (6, 'C', '2');

insert into zh (COL1, COL2, COL3)
values (7, 'A', '1');

insert into zh (COL1, COL2, COL3)
values (8, 'A', '2');

insert into zh (COL1, COL2, COL3)
values (9, 'B', '2');

insert into zh (COL1, COL2, COL3)
values (10, 'B', '2');

select * from zh;
select col1,col2,col3 from (
select b.*,
case when (col2=(select col2 from zh a where a.col1 =b.col1+1) and col3=(select col3 from zh a where a.col1 =b.col1+1) ) then 1 end bz
from zh b order by col1) where bz is null;
小灰狼W 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 java3344520 的回复:]
SQL codeselectmax(col1),col2,col3from t_tablegroupby col2,col3
[/Quote]
不就是这样的么?
gelyon 2010-01-08
  • 打赏
  • 举报
回复
楼主:
你是以col2、col3分组,为什么结果中会出现
col1 col2 col3
2 A 1 4 B 1
6 C 2
7 A 1
8 A 2
10 B 2

你的需求到底是怎么的啊?说清楚点!
iqlife 2010-01-08
  • 打赏
  • 举报
回复
没有什么难度,判断连续的就取最大的,用LEAD或者LEG,我要回老家了,要不就帮你写了
yukang_ky 2010-01-08
  • 打赏
  • 举报
回复
你想要达到的目的是:如果1、2行数据的col2,col3相同就取取, 3、4行数据相同就取第4行,。。。
7、8行数据col2,col3不相同时,都显示出来?
wuyisky84 2010-01-08
  • 打赏
  • 举报
回复
就是要按照col2,col3 分组,但是col1 也要显示出来
lhj821130 2010-01-08
  • 打赏
  • 举报
回复
和奇偶数行没有关系,我举的例子正好列成偶数了 呵呵
lhj821130 2010-01-08
  • 打赏
  • 举报
回复
兄弟们!请先看清题目再回贴,以上语句根本现实不了我想要的
iqlife 2010-01-08
  • 打赏
  • 举报
回复
select max(col1),col2,col3 from t_table
group by col2,col3
fatfoxz 2010-01-08
  • 打赏
  • 举报
回复
select * from t_table where mod(col1, 2) = 0
fatfoxz 2010-01-08
  • 打赏
  • 举报
回复
怎么看上去就是取了偶数行?

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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