2013-02-25 48 views
0

假设我有一个SQL Server表包含多列的东西沿着线:SQL服务器 - 返回完整记录了成对的场

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 

在这种情况下,Val3_1被重复Col1在过去的3条记录,而其余值不重复。

我如何编写一个查询返回的全套列,其中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

您可以使用子查询:

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 with Demo

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

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

SQL Fiddle with Demo

+0

绝对完美的!!!!!谢谢!!! - 等待时间通过以标记您的解决方案。谢谢!!!! – 2013-02-25 21:59:09

+0

@JohnBus​​tos欢迎您! :) – Taryn 2013-02-25 22:00:57