SQL 服务器 - 传输/仅采用 ID 相同但名称不同的行中的一个名称

SQL Server - Transfering / Adopting only one name from Rows with same ID´s but different names

我有以下问题:
我的 table 看起来像这样。

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

因为它们是同一家公司的 "different" 个名称,所以我决定保留最长的名称作为我的公司名称。

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

   ID    Name
   1     Company Limited
   2     Example Corporation

之后的 table 应该是这样的。

您可以使用 ROW_NUMBER()ID 上的 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

注意:这将从您的 table 中物理删除不是最长条目的记录。如果您不想物理删除它们,并且只删除 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

Ties 的另一种选择...

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