使用SQL Server,我有一个如下所示的表:
我需要做的是编写一个查询来识别Name和Permissions字段相等的场景,这样我就可以给它们一个唯一的Set ID。
例如,第2行和第4行是我可以给出SetID的集合,第6行和第7行是我可以给出另一个SetID的集合。但第2行和第3行不是一组。
到目前为止,我已尝试使用DENSE_RANK () Over(Order by Name)
,这有助于根据名称添加ID,但不考虑匹配权限。并尝试加入表格本身,但有数百万行数据,我最终得到了不必要的重复。
我所遵循的逻辑是:
如果另一行的一行=(名称和权限)=(名称和权限),则为它们分配一个SetID。
请帮助我用这个把头撞在墙上。理想情况下,SQL查询可以实现此目的但对任何事情都是开放的。
谢谢!
答案 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
内部选择获得不同的组合,外部选择分配数字。
答案 1 :(得分:0)
这可能会做你想做的事情。
SELECT
name,
permissions,
accountname,
ROW_NUMBER() OVER (PARTITION BY name,permissions ORDER By name,permissions) as SetID
FROM table;