SQL Server: opération au niveau du bit dans Group By

Je dois utiliser des opérations bit à bit en groupe mais j'ai trouvé quelque chose.

table:

PermissionId, BitMask(BigInt) 1, 4 2, 7 1, 8 1, 5 

Je veux des résultats comme;

 1, 13 2, 7 

Comment puis-je écrire ce script dans MSSQL comme ci-dessous

 SELECT PermissionId, BIT_OR(BitMask) FROM table GROUP BY PermissionId 

Votre question est devenue très intéressante.

Créez cette fonction (vous pouvez reconsidérer le nom)

 CREATE function f_test ( @param bigint ) returns @t table (value bigint) AS BEGIN ;WITH CTE AS ( SELECT @param % 2 value, 1 multiplier, @param / 2 remain UNION ALL SELECT remain % 2, multiplier * 2, remain / 2 FROM CTE WHERE remain > 0 ) INSERT @t SELECT multiplier FROM CTE WHERE value = 1 RETURN END 

Maintenant, vous pouvez exécuter ce script, j'utilise une variable de table, remplacez-la par votre table:

 DECLARE @t table(PermissionId int, BitMask bigint) INSERT @t values(1,4),(2,7),(1,8),(1,5) SELECT t1.PermissionId, SUM(distinct t2.Value) Total FROM @t t1 CROSS APPLY f_test(t1.BitMask) t2 GROUP BY t1.PermissionId 

Résultat:

 PermissionId Total 1 13 2 7