有人可以帮我解决这个问题吗?
CREATE TABLE TT (
A NUMBER PRIMARY KEY,
B VARCHAR2(5)
);
insert into tt values (11,'A');
insert into tt values (12,'A');
insert into tt values (13,'B');
insert into tt values (14,'B');
insert into tt values (15,'C');
insert into tt values (16,'D');
insert into tt values (17,'E');
insert into tt values (18,'E');
insert into tt values (19,'F');
insert into tt values (20,'F');
COMMIT;
SELECT * FROM TT;
+---+---+
| A | B |
+---+---+
|11 | A |
|12 | A |
|13 | B |
|14 | B |
|15 | C |
|16 | D |
|17 | E |
|18 | E |
|19 | F |
|20 | F |
+---+---+
我的要求是'B'列映射了多个'A'列的内容Like(值'E'映射了'A'列中的两行) o / p
+---+
| A |
+---+
| 11|
| 12|
| 13|
| 14|
| 17|
| 18|
| 19|
| 20|
+---+
我已经实现了使用以下分析查询。我想知道是否可以在没有分析功能的情况下进行存档。
select a
from (SELECT tt.*, COUNT(*) over (partition by b) cnt
FROM TT
)
where cnt >= 2;
答案 0 :(得分:1)
使用聚合这很容易:
select a
from tt
where b in (select b from tt group by b having count(*) > 1);
注意,您可以避免使用聚合,因为Oracle提供了rowid
伪列:
select a
from tt
where exists (select 1
from tt tt2
where tt2.b = tt.b and tt2.rowid <> tt.rowid
);
答案 1 :(得分:0)
您可以通过以下方式找到候选人:
select a
from tt
where B in (
select B
from tt
group by b
having count(*) >= 2);
答案 2 :(得分:0)
.quick-actions i {
font-size: 54px;
cursor: pointer;
color: #999;
vertical-align: middle;
}
.fa:before {
vertical-align: middle;
}
.quick-actions{
border:1px solid #ccc;
display: inline-block;
}
这是另一种解决方案。我认为在这种情况下你无法避免使用聚合函数。