大概你想得到col2
每个col1
出现的副本。您不能在单个查询中真正做到这一点^。相反,您需要做的是获取重复项列表,然后使用它来检索任何其他关联值:
select col1, col2
from table1
where col1 in (select col1
from table1
group by col1
having count (col1) > 1)
order by col2 desc
^ 好的,您可以使用解析函数作为@rs。证明了。对于这种情况,我怀疑嵌套查询会更有效,但两者都应该给你相同的结果。
根据评论,您似乎不清楚为什么不能只添加第二列。假设您有如下示例数据:
Col1 | Col2
-----+-----
1 | A
1 | B
2 | C
2 | D
3 | E
如果你跑
select Col1, count(*) as cnt
from table1
group by Col1
having count(*) > 1
那么你的结果将是:
Col1 | Cnt
-----+-----
1 | 2
2 | 2
您不能只添加Col2
到此查询而不将其添加到group by
子句,因为数据库将无法知道您实际想要的值(即对于 Col1=1,数据库应该返回“A”还是“B”?)。如果将 Col2 添加到group by
子句中,则会得到以下结果:
select Col1, Col2, count(*) as cnt
from table1
group by Col1, Col2
having count(*) > 1
Col1 | Col2 | Cnt
-----+------+----
[no results]
这是因为计数是针对Col1
and的每个组合Col2
(每个组合都是唯一的)。
最后,通过使用嵌套查询(如我的回答)或分析函数(如@rs.的回答),您将得到以下结果(查询稍作更改以返回计数):
select t1.col1, t1.col2, cnt
from table1 t1
join (select col1, count(*) as cnt
from table1
group by col1
having count (col1) > 1) t2
on table1.col1 = t2.col1
Col1 | Col2 | Cnt
-----+------+----
1 | A | 2
1 | B | 2
2 | C | 2
2 | D | 2