see your scenarios full illustration below--illustration table containing your sampleSELECT * INTO #UserRolesFROM(SELECT [USER]='A' ,[ROLE]='X', FLAG='Y' UNION ALLSELECT 'A', 'Y','Y' UNION ALLSELECT 'A', 'Z','Y' UNION ALLSELECT 'B', 'X','Y' UNION ALLSELECT 'B', 'Y','Y' UNION ALLSELECT 'B', 'Z','Y' UNION ALLSELECT 'B', 'Q','Y' UNION ALLSELECT 'C', 'X','Y' UNION ALLSELECT 'C', 'Y','Y' UNION ALLSELECT 'C', 'Z','Y' UNION ALLSELECT 'C', 'T','Y' )t--actual solutionSELECT t.*FROM #UserRoles tINNER JOIN (SELECT [USER]FROM #UserRolesGROUP BY [USER]HAVING COUNT(DISTINCT CASE WHEN [ROLE] IN ('X','Y','Z') THEN [ROLE] ELSE NULL END) = 3AND COUNT(CASE WHEN [ROLE] IN ('X','Y','Z') THEN NULL ELSE [ROLE] END) = 0)t1ON t1.[USER] = t.[USER]--clean up table after useDROP TABLE #UserRolesoutput----------------------------------------USER ROLE FLAGA X YA Y YA Z Y------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/