如何使用SQL识别相似的集合?

时间:2015-03-08 07:41:37

标签: sql sql-server business-intelligence

使用SQL Server,我有一个如下所示的表:

enter image description here

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

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

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

我所遵循的逻辑是:

如果另一行的一行=(名称和权限)=(名称和权限),则为它们分配一个SetID。

请帮助我用这个把头撞在墙上。理想情况下,SQL查询可以实现此目的但对任何事情都是开放的。

谢谢!

2 个答案:

答案 0 :(得分:2)

你可以这样做:

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

内部选择获得不同的组合,外部选择分配数字。

SQL小提琴:http://sqlfiddle.com/#!6/c8319/3

答案 1 :(得分:0)

这可能会做你想做的事情。

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