Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在表中获取具有相同值的行_Sql_Oracle - Fatal编程技术网

Sql 如何在表中获取具有相同值的行

Sql 如何在表中获取具有相同值的行,sql,oracle,Sql,Oracle,我的桌子是这样的 | ID | Person_Number | Type | 我需要Cases表中的所有行都具有相同的Person_编号,但是rowname必须大于1,如果只有一行具有特定的personnumber,则忽略该行,并且该行必须具有特定的类型 Select * from CASES where type = 'TYPE1' order by Person_NUMBER 但我有大约100万个不同的人号,但只有少数人属于超过一行 请帮助我您没有指定DBMS,因此这是使用窗口函数的

我的桌子是这样的

| ID | Person_Number | Type | 
我需要Cases表中的所有行都具有相同的Person_编号,但是rowname必须大于1,如果只有一行具有特定的personnumber,则忽略该行,并且该行必须具有特定的类型

Select * 
from CASES
where type = 'TYPE1'
order by Person_NUMBER
但我有大约100万个不同的人号,但只有少数人属于超过一行


请帮助我

您没有指定DBMS,因此这是使用窗口函数的标准SQL:

select *
from (
  select c.*, count(*) over (partition by c.person_number) as number_count
  from cases c
  where c.type = 'TYPE1'
) t
where number_count > 1
order by person_number;

这是用于哪个RDBMS的?请添加一个标记来指定您使用的是mysql、postgresql、sql server、oracle还是db2,或者其他完全不同的东西
CREATE TABLE cases AS
SELECT ROWNUM AS id, 
       TRUNC(DBMS_RANDOM.VALUE (1, 1000000)) person_number, 
       'TYPE' || TRUNC(DBMS_RANDOM.VALUE (1, 10)) TYPE
  FROM DUAL
CONNECT BY ROWNUM <= 1000000;

CREATE INDEX CASES_I1 ON CASES(TYPE, PERSON_NUMBER);    
SELECT *
  FROM cases
 WHERE (TYPE, person_number) IN
    (SELECT TYPE, person_number
       FROM cases
      WHERE TYPE = 'TYPE1'
     GROUP BY TYPE, person_number
     HAVING COUNT (*) > 1)