Oracle SQL:如何根据不同的行值过滤掉行

问题描述 投票:0回答:1

我想根据以下条件过滤我的数据

  • 对于 ID,如果某个部分在特定类型
    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;
sql oracle window-functions
1个回答
0
投票

这应该可以解决问题:

select * from data where id in (
    select id
      from data
  group by id
    having count(id)>=2
)

内部查询选择所有出现两次以上的

id
。外部查询选择内部查询中选择了
id
的所有列

© www.soinside.com 2019 - 2024. All rights reserved.