【问题标题】:SQL Server - Return full record for Duplicated FieldSQL Server - 返回重复字段的完整记录
【发布时间】:2013-02-26 05:55:47
【问题描述】:

假设我有一个包含许多列的 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

在这种情况下,Val3_1 在最后 3 条记录中重复 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

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

谢谢!!!

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    您可以使用子查询:

    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

    【讨论】:

    • 绝对完美!!!!谢谢!!! - 等待时间通过以标记您的解决方案。谢谢!!!!
    猜你喜欢
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    相关资源
    最近更新 更多