如何使用 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
使用 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