【发布时间】:2017-11-18 11:30:19
【问题描述】:
我查看了其他答案,但无法将答案应用到我的申请中。我有一个返回如下内容的查询:
SELECT *
FROM MYTABLE T;
__________________________________________________________
| ID | AORB | ....OTHER (UNIQUE) CONTENT..... |
|---------------------------------------------------------|
| 1 | A | ....CONTENT |
| 1 | B | ....CONTENT |
| 2 | A | ....CONTENT |
| 3 | A | ....CONTENT |
| 3 | B | ....CONTENT |
| 4 | A | ....CONTENT |
| 5 | B | ....CONTENT |
| 6 | A | ....CONTENT |
| 6 | B | ....CONTENT |
-----------------------------------------------------------
如您所见,有时最多有两行具有 相同的 ID 但内容不同,AORB 为 A 或 B。有时会有“唯一”ID 的计数为 1 和 AORB 可以是 A 或 B。
为了使数据结构清晰,您可以通过过滤“AORB”来拆分表,如下所示:
全A:
SELECT *
FROM MYTABLE T
WHERE T.AORB = 'A';
__________________________________________________________
| ID | AORB | ....OTHER (UNIQUE) CONTENT..... |
|---------------------------------------------------------|
| 1 | A | ....CONTENT |
| 2 | A | ....CONTENT |
| 3 | A | ....CONTENT |
| 4 | A | ....CONTENT |
| 6 | A | ....CONTENT |
----------------------------------------------------------
所有 B:
SELECT *
FROM MYTABLE T
WHERE T.AORB = 'B';
__________________________________________________________
| ID | AORB | ....OTHER (UNIQUE) CONTENT..... |
|---------------------------------------------------------|
| 1 | B | ....CONTENT |
| 3 | B | ....CONTENT |
| 5 | B | ....CONTENT |
| 6 | B | ....CONTENT |
-----------------------------------------------------------
我需要一个类似于以下内容的查询,但将所有其他内容行返回到右侧:
SELECT ID, MIN(AORB)
FROM MYTABLE T
GROUPBY ID;
我的要求是,如果有两行具有相同的id,则返回AORB 的行A。如果给定 id 只有一行,则返回该行,而不考虑 AORB。
我尝试对 a 和 b 查询进行 UNION,但由于内容不同,它仍然返回“重复”ID:
SELECT *
FROM MYTABLE T
WHERE T.AORB = 'B'
UNION
SELECT *
FROM MYTABLE T
WHERE T.AORB = 'A';
【问题讨论】:
标签: sql oracle group-by greatest-n-per-group