【问题标题】:SQL Server - Transfering / Adopting only one name from Rows with same ID´s but different namesSQL Server - 仅从具有相同 ID 但名称不同的行中传输/采用一个名称
【发布时间】:2016-08-08 13:59:14
【问题描述】:

我有以下问题:
我的桌子是这样的。

   ID    Name
   1     Company LTD.
   1     Company Limited
   1     Company ltd
   2     Example Corp.
   2     Example Corporation
   ...

由于它们是同一家公司的“不同”名称,所以我决定保留最长的名称作为我的公司名称。

所以我的问题是。如何检查最长的一个,同时只保留一个条目,例如

   ID    Name
   1     Company Limited
   2     Example Corporation

之后的表格应该是这样的。

【问题讨论】:

    标签: sql sql-server comparison max string-length


    【解决方案1】:

    您可以在ID 上使用ROW_NUMBER()PARTITION 并通过LEN() desc 订购:

    ;With Cte As
    (
        Select  *,
                Row_Number() Over (Partition By Id Order By Len(Name) Desc) As RN
        From    YourTable
    )
    Delete  Cte
    Where   RN <> 1
    

    注意:这将从您的表中物理删除不是最长条目的记录。如果您不希望物理删除它们,并且只希望 SELECT 最长的条目,请改用以下内容:

    ;With Cte As
    (
        Select  *,
                Row_Number() Over (Partition By Id Order By Len(Name) Desc) As RN
        From    YourTable
    )
    Select  Id, Name
    From    Cte
    Where   RN = 1
    

    【讨论】:

    • 非常感谢!这就是我一直在寻找的东西!'昨天自己已经想到了。
    【解决方案2】:

    Ties 的更多选择...

    select
    top 1 with ties
    id,name
    from
    table
    order by
    row_number() over (partition by id order by len(name))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-10
      • 2021-03-20
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 2020-03-19
      • 2013-02-16
      相关资源
      最近更新 更多