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)