我有一个表,其中包含基于此信息的email,gruppe作为字段,我想查找具有相同成员身份(相同gruppe)的所有用户,因此我可以将他们分组到positions表中的位置。 gruppe是唯一的活动目录组名称。
CREATE TABLE [dbo].[tblsource] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[email] VARCHAR (150) NULL,
[gruppe] VARCHAR (150) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE TABLE [dbo].[tblpositions] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[email] VARCHAR (150) NULL,
[position] VARCHAR (150) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
我实际上想在位置上写一个哈希或类似的东西(如果所有组都相同,则必须相同)。 这将使我能够轻松地识别出所有具有相同粗暴行为的人。 考虑到我必须从电子表格中加载数据的事实,对此表示赞赏(也是不同的方法)。
tblsource(样本数据):
user1@company.com,security-group1
user1@company.com,security-group89
user84@company.com,security-group89
user3@company.com,security-group986
user84@company.com,security-group1
所以user1和user84具有相同的成员身份,因此共享一个职位
答案 0 :(得分:0)
要查找具有相同成员身份的相同用户,可以尝试以下代码。
;WITH cte_membership(email,membership)
AS
(
SELECT u.email,
STUFF(
(
SELECT N','+m.[group]
FROM dbo.tblsource m
WHERE m.email=u.email
ORDER BY m.[group]
FOR XML PATH(''),TYPE).value('.','nvarchar(max)')
,1,1,'') AS membership
FROM dbo.tblsource u
GROUP BY u.[email]
),
cte_m(membership)
AS
(
SELECT m.membership
FROM cte_membership m
GROUP BY m.membership
HAVING COUNT(*)>1
)
SELECT a.membership, b.email
FROM cte_m a
INNER JOIN cte_membership b
ON a.membership=b.membership;