0

假设我有一个 SQL Server 表,其中包含许多列,类似于:

Col1:    Col2:    Col3:   ...   Coln:
Val1_1   Val1_2   Val1_3        Val1_n
Val2_1   Val2_2   Val2_3        Val2_n
Val3_1   Val3_2   Val3_3        Val3_n
Val3_1   Val4_2   Val4_3        Val4_n
Val3_1   Val5_2   Val5_3        Val5_n

在这种情况下,对最后 3 条记录Val3_1重复Col1,而其余值不重复。

如何编写查询以返回Col1重复值以返回的完整列集:

Col1:    Col2:    Col3:   ...   Coln:
Val3_1   Val3_2   Val3_3        Val3_n
Val3_1   Val4_2   Val4_3        Val4_n
Val3_1   Val5_2   Val5_3        Val5_n

我尝试使用该Group By函数,但我不得不写出每一列的名称(这非常令人沮丧),我希望得到以下内容:

SELECT MyTable.* FROM MyTable WHERE count(MyTable.Col1) OVER() > 1

显然,这不起作用,但我怎么能按照这些思路做点什么?

谢谢!!!

4

1 回答 1

4

您可以使用子查询:

select *
from mytable t1
inner join
(
  select count(col1) Total, col1
  from mytable
  group by col1
  having count(col1) > 1
) t2
  on t1.col1 = t2.col1

请参阅带有演示的 SQL Fiddle

或者您可以使用count(*) over()

select *
from
(
  select *,
    count(*) over(partition by col1) tot
  from mytable
) src
where tot > 1

请参阅带有演示的 SQL Fiddle

于 2013-02-25T21:55:47.213 回答