如何使用 SQL 识别相似集?

How do I identify like sets using SQL?

使用 SQL 服务器,我有一个 table 看起来像这样:

我需要做的是编写一个查询来识别 Name 和 Permissions 字段相等的场景,以便我可以给它们一个唯一的 Set ID。

例如,第 2 行和第 4 行是我可以提供一个 SetID 的集合,而第 6 行和第 7 行是一个我可以提供另一个 SetID 的集合。但是第 2 行和第 3 行不是一组。

到目前为止,我已尝试使用 DENSE_RANK () Over(Order by Name),这有助于添加基于类似名称的 ID,但未考虑匹配权限。并尝试加入 table 本身,但有数百万行数据,我最终得到了不需要的重复项。

我遵循的逻辑是这样的:

如果一行的(名称和权限)= 另一行的(名称和权限)给他们一个 SetID 来共享。

请帮助我用这个把头撞到墙上。理想情况下,SQL 查询可以完成此操作,但对任何事情都持开放态度。

谢谢!

这可能会执行类似于您想要的操作。

SELECT 
   name,
   permissions,
   accountname,   
   ROW_NUMBER() OVER (PARTITION BY name,permissions ORDER By name,permissions) as SetID
FROM table;

你可以这样做,例如:

select
  Name,
  Permission,
  row_number() over (order by Name, Permission) as RN
from (
  select distinct
    Name,
    Permission
  from
    permissions
) TMP
order by Name, Permission

内层select得到不同的组合,外层分配数字。

SQL Fiddle: http://sqlfiddle.com/#!6/c8319/3