【发布时间】:2011-07-19 09:51:16
【问题描述】:
是否可以使用 oracle pl/sql 检索每行当前相同记录的数量?
例如, 我有一个由 id、name、age 列组成的类表
我想让具有相同姓名和年龄的学生序列进入班级,假设 id 在不改变数据结构的情况下进行反击。
谢谢。
问候,
吉姆
【问题讨论】:
标签: oracle select plsql count sequence
是否可以使用 oracle pl/sql 检索每行当前相同记录的数量?
例如, 我有一个由 id、name、age 列组成的类表
我想让具有相同姓名和年龄的学生序列进入班级,假设 id 在不改变数据结构的情况下进行反击。
谢谢。
问候,
吉姆
【问题讨论】:
标签: oracle select plsql count sequence
不确定我是否完全得到您的要求;你有一个奇怪的词组。输入数据和预期结果的示例总是有用的。
大概是这样的:
select id, name, age
from your_table
where (name, age) in
( select name. age
from your_table
group by name, age
having count(id) > 1 )
order by name, age, id
/
您可以通过分析解决这个问题。但是,您仍然需要一个外部查询来过滤掉不重复的记录,所以我不确定您会得到什么:
select * from (
select id, name, age
, count(id) over (partition by name, age) as dup_count
from your_table )
where dup_count > 1
order by name, age, id
/
【讨论】:
我也不确定,但在我看来这与分析函数有关。以此为例,看一下 srlno 列,使用解析函数计算:
SELECT empno, deptno, hiredate,
ROW_NUMBER( ) OVER (PARTITION BY
deptno ORDER BY hiredate
NULLS LAST) SRLNO
FROM emp
WHERE deptno IN (10, 20)
ORDER BY deptno, SRLNO;
EMPNO DEPTNO HIREDATE SRLNO
------ ------- --------- ----------
7782 10 09-JUN-81 1
7839 10 17-NOV-81 2
7934 10 23-JAN-82 3
7369 20 17-DEC-80 1
7566 20 02-APR-81 2
7902 20 03-DEC-81 3
7788 20 09-DEC-82 4
7876 20 12-JAN-83 5
更多关于分析函数: http://www.orafaq.com/node/55
请记住,如果您可以使用 SQL 而不是 PL/SQL 来实现您的目标,这是一种更好的方法。
【讨论】: