我想根据以下条件过滤我的数据
A
和 B
下出现两次或两次以上,那么我想过滤其数据。data
| ID | TYPE | PART |
|-----|------|------|
| 101 | A | 10 |
| 101 | B | 10 |
| 101 | B | 10 |
| 101 | B | 20 |
| 101 | C | 30 |
| 102 | A | 10 |
| 102 | B | 25 |
| 103 | A | 25 |
| 103 | B | 25 |
output
| ID | Type | Part |
|-----|------|------|
| 101 | A | 10 |
| 101 | B | 10 |
| 101 | B | 10 |
| 103 | A | 25 |
| 103 | B | 25 |
WITH data AS (
SELECT 101 id, 'A' type, 10 part FROM dual UNION ALL
SELECT 101 id, 'B' type, 10 part FROM dual UNION ALL
SELECT 101 id, 'B' type, 10 part FROM dual UNION ALL
SELECT 101 id, 'B' type, 20 part FROM dual UNION ALL
SELECT 101 id, 'C' type, 30 part FROM dual UNION ALL
SELECT 102 id, 'A' type, 10 part FROM dual UNION ALL
SELECT 102 id, 'B' type, 25 part FROM dual UNION ALL
SELECT 103 id, 'A' type, 25 part FROM dual UNION ALL
SELECT 104 id, 'B' type, 25 part FROM dual
)
SELECT * FROM data;
这应该可以解决问题:
select * from data where id in (
select id
from data
group by id
having count(id)>=2
)
内部查询选择所有出现两次以上的
id
。外部查询选择内部查询中选择了 id
的所有列