SSMS 2016如何新增列判断用户组是否为跨公司混合用户组
解决方案
SSMS 2016完全可以实现该需求,核心通过SQL窗口函数分组统计同用户组内的公司数量即可完成标识,具体操作如下:
首先假设你的存储表名为user_group_info,包含核心字段:用户组、用户ID、所属公司,可根据你的实际表结构调整字段名。
场景1:仅临时查询输出带标识的结果,无需修改原表
直接执行如下查询语句即可:
SELECT *, CASE WHEN COUNT(DISTINCT 所属公司) OVER (PARTITION BY 用户组) > 1 THEN '混合组' ELSE '非混合组' END AS 组类型标识 FROM user_group_info
逻辑说明:用COUNT(DISTINCT)按用户组分区统计每个组内不同公司的数量,数量大于1说明组内有多个公司来源,标记为混合组,否则标记为非混合组。
场景2:需要在原表新增持久化列存储标识
分两步操作:
- 先给原表新增存储标识的字段
ALTER TABLE user_group_info ADD 组类型标识 NVARCHAR(10) NULL
- 批量更新所有用户组的标识值
WITH group_calculate AS ( SELECT 用户组, CASE WHEN COUNT(DISTINCT 所属公司) > 1 THEN '混合组' ELSE '非混合组' END AS calc_type FROM user_group_info GROUP BY 用户组 ) UPDATE t SET t.组类型标识 = c.calc_type FROM user_group_info t INNER JOIN group_calculate c ON t.用户组 = c.用户组
补充说明
如果后续表内的用户组成员会发生增删改,需要同步更新标识值,有两种处理方式:
- 每次修改完成员数据后,重新执行上述场景2的更新语句即可
- 给表创建增删改触发器,触发时自动重新计算对应用户组的标识值(SQL Server 计算列不支持窗口函数,无法直接用计算列实现自动更新)
内容的提问来源于stack exchange,提问作者Chrissy Scott
相关产品推荐
相关产品推荐

