Oracle sql:[1]获取多列值相同数据行

 时间:2026-02-12 09:53:20

1、创建实验模拟多行多列值数据相同的行

--创建表

create table CLGJXX

(

  ID   NUMBER(3) unique,

  HPHM VARCHAR2(5),

  JGSJ VARCHAR2(14)

)

--插入数据

insert into clgjxx (ID, HPHM, JGSJ) values (101, 'aaa', '20141010161000');

insert into clgjxx (ID, HPHM, JGSJ) values (102, 'aaa', '20141010161000');

insert into clgjxx (ID, HPHM, JGSJ) values (103, 'bbb', '20141010161001');

insert into clgjxx (ID, HPHM, JGSJ) values (104, 'bbb', '20141010161001');

insert into clgjxx (ID, HPHM, JGSJ) values (105, 'ccc', '20141010161100');

insert into clgjxx (ID, HPHM, JGSJ) values (106, 'ccc', '20141010161100');

insert into clgjxx (ID, HPHM, JGSJ) values (107, 'aaa', '20141010161124');

commit;

说明:CLGJXX 表中出现了多行HPHM 列和JGSJ 列的值相同

Oracle sql:[1]获取多列值相同数据行

2、获取所有多行多列值数据相同的行

with same_date as

(

select hphm,jgsj from clgjxx group by (hphm,jgsj) having count(1) >1

)

select * from clgjxx a where exists

(

select 'A' from same_date b

where a.hphm=b.hphm

and a.jgsj=b.jgsj

);

Oracle sql:[1]获取多列值相同数据行

3、获取多行多列值数据相同的行中的某一行,这在删除的时候有用

select * FROM clgjxx a

WHERE a.ROWID >

(

SELECT MIN( b.ROWID ) FROM clgjxx b

WHERE b.hphm = a.hphm

and b.jgsj=a.jgsj

);

Oracle sql:[1]获取多列值相同数据行

4、创建模拟多行相同数据

create table CLGJXX_2

(

  ID   NUMBER(3) ,

  HPHM VARCHAR2(5),

  JGSJ VARCHAR2(14)

);

--插入数据

insert into CLGJXX_2 (ID, HPHM, JGSJ) values (101, 'aaa', '20141010161000');

insert into CLGJXX_2 (ID, HPHM, JGSJ) values (101, 'aaa', '20141010161000');'20141010161000');

insert into CLGJXX_2 (ID, HPHM, JGSJ) values (102, 'bbb', '20141010161001');

insert into CLGJXX_2 (ID, HPHM, JGSJ) values (102, 'bbb', '20141010161001');

insert into CLGJXX_2 (ID, HPHM, JGSJ) values (103, 'ccc', '20141010161100');

insert into CLGJXX_2 (ID, HPHM, JGSJ) values (103, 'ccc', '20141010161100');

insert into CLGJXX_2 (ID, HPHM, JGSJ) values (107, 'aaa', '20141010161124');

commit;

说明:CLGJXX 表中出现了多行值相同数据行

Oracle sql:[1]获取多列值相同数据行

5、获取相同数据的行

with same_date as

(

select hphm,jgsj from clgjxx_2 group by (hphm,jgsj) having count(1) >1

)

select * from clgjxx_2 a where exists

(

select 'A' from same_date b

where a.hphm=b.hphm

and a.jgsj=b.jgsj

);

注意:在这里可以发现只是和第二步骤表名不同,其实这是有规律的,只要保证所选取的分组列分组之后的数据唯一就行

Oracle sql:[1]获取多列值相同数据行

6、获取相同数据行的某一行

select * FROM clgjxx_2 a

WHERE a.ROWID >

(

SELECT MIN( b.ROWID ) FROM clgjxx_2 b

WHERE b.hphm = a.hphm

and b.jgsj=a.jgsj

);

注意:在这里可以发现只是和第四步骤表名不同,和上一步骤一样,只要保证where谓词分组后数据唯一

Oracle sql:[1]获取多列值相同数据行

  • 怎样用left和len删除右侧英文部分
  • Excel生成随机不重复的日期
  • 北京停车优惠券怎么获得
  • Excel如何限制只能输入数字?
  • 在excel表中如何快速隐藏没有数据的空白单元格
  • 热门搜索
    国内旅游公司 青藏线旅游攻略 二手旅游车 亳州旅游景点大全 北京旅游景点大全排名 凤凰古城旅游团 宁波旅游局 吴忠旅游 游侠客摄影旅游网 山东济南旅游景点