Когда вы играете с меньшим значением (например, 16-битным макс.), Самый эффективный способ сделать это с SQL Server - это использовать таблицу со всеми вычисленными результатами и использовать объединение.выполнить запрос от 30 секунд до 0 секунд, выполнив такие действия для запроса, который должен вычислять вес Хэмминга для 4-битного значения на 17 000 строк.
WITH HammingWeightHelper AS (
SELECT x, Fx
FROM (VALUES(0,0),(1,1),(2,1),(3,2),
(4,1),(5,2),(6,2),(7,3),
(8,1),(9,2),(10,2),(11,3),
(12,2),(13,3),(14,3),(15,4)) AS HammingWeight(x, Fx)
)
SELECT HammingWeight.Fx As HammingWeight, SomeTable.Value As bitField
FROM SomeTable INNER JOIN
HammingWeightHelper ON HammingWeightHelper.x = SomeTable.Value
Конечно, это уродливое решениеи это, вероятно, не подойдет для длинных битовых полей.