CTE AND.
DECLARE @table TABLE (UserID int, AccessRights int)
INSERT @table (UserID, AccessRights) VALUES (2, 0x3)
INSERT @table (UserID, AccessRights) VALUES (2, 0x2)
INSERT @table (UserID, AccessRights) VALUES (2, 0x7)
;WITH Ranked AS
(
SELECT UserID, AccessRights
, DENSE_RANK() OVER (PARTITION BY UserID ORDER BY AccessRights) RankNum
, CASE WHEN DENSE_RANK()
OVER (PARTITION BY UserID ORDER BY AccessRights DESC) = 1
THEN 1
ELSE 0
END IsLastItem
FROM @table
),
RecursiveCTE AS
(
SELECT R.UserID, RankNum, IsLastItem, R.AccessRights
FROM Ranked R
WHERE R.RankNum = 1
UNION ALL
SELECT R.UserID, R.RankNum, R.IsLastItem
, R.AccessRights & RecursiveCTE.AccessRights
FROM RecursiveCTE
INNER JOIN Ranked R ON R.UserID = RecursiveCTE.UserID
WHERE R.RankNum = RecursiveCTE.RankNum + 1
)
SELECT UserID, AccessRights
FROM RecursiveCTE
WHERE IsLastItem = 1