SQL Server查询在组中查找唯一用户

时间:2016-02-10 16:20:38

标签: sql-server

我的问题是这个;几个安全组每个都有几个用户,用户可以在许多安全组中。

我正在尝试编写一个查询,列出每个安全组的名称,后跟该组中每个用户的数量。 (成功完成该部分)我遇到问题的部分是我只想计算每个用户一次。因此,如果用户在A,B,C组中,他应该只计入第一组(无论他被计入哪个都无关紧要。

以下是第一部分正常工作的基本代码:

select 
    /*count(distinct um.user_id),*/ sg.group_name as 'Security Group', 
    COUNT(sg.group_name) as 'Total Users' 
from 
    user_mstr um
join 
    user_group_xref ug on ug.user_id = um.user_id
join 
    security_groups sg on sg.group_id = ug.group_id
group by  
    sg.group_name, um.user_id

1 个答案:

答案 0 :(得分:0)

这是基于数据模型中的假设,特别是user_group_xref表,但不是返回完整的外部参照,它将返回每个user_id和它们所在的min group_id。我试图保留代码。和你的榜样一样。

select /*count(distinct um.user_id),*/ sg.group_name as 'Security Group', 
       COUNT(um.user_id) as 'Total Users' 
from security_groups sg
left outer join (select user_id, min(group_id) group_id from user_group_xref group by USER_ID) ug on sg.group_id = ug.group_id
left outer join user_mstr um  on ug.user_id = um.user_id
group by  sg.group_name