我的查询需要一些帮助。一直在寻找年龄,但不能提出正确的sql语句。
这是我的表 DRAFT DFT (只有1个表,这些都是列)
RowID|SID Number|Column C|RELS Number|Column E|Dr Number |Column G |
1------ | 23101----- |21-8-2014| 22234 ----- | UNR---------| 14243-----|2
2------ | 23101 ----- |22-8-2014| 22234 ----- | UNS---------| 14243 ---| 2
3------ | 23101------ |28-8-2014| 22232 ----- | FRE ---------| 14243 ---| 2
我需要的是以下内容:
我需要选择所有行和&列 SID Number和 RELS Number中的值组合的表的列值是重复的,因此我必须看到的是以下两行:
1------ | 23101----- |21-8-2014| 22234 ----- | UNR---------| 14243-----|2
2------ | 23101 ----- |22-8-2014| 22234 ----- | UNS---------| 14243 ---| 2
而不是这个:
1------ | 23101----- |21-8-2014| 22234 ----- | UNR---------| 14243-----|2
2------ | 23101 ----- |22-8-2014| 22234 ----- | UNS---------| 14243 ---| 2
**3------ | 23101------ |28-8-2014| 22232 ----- | FRE ---------| 14243 ---| 2**
因为 SID Number和 RELS Number的组合不重复。
我知道Dr号的列值在所有3行中都是相同的。
这对我的sql语句有用吗?
这是我的陈述:
SELECT *
FROM DRAFT DFT
INNER JOIN (SELECT SID Number,RELS Number, COUNT(*) AS "TOTALCOUNT
FROM DRAFT DTF1GROUP BY SID Number,RELS Number
HAVING COUNT (*)>1
) B ON DTF.SID Number=B.SID Number AND DTF.RELS Number=B.RELS Number
答案 0 :(得分:2)
只需使用分析函数:
select d.*
from (select d.*, count(*) over (partition by sid, rels) as cnt
from draft
) d
where cnt > 1;