执行按位求和

Performing a bitwise sum(执行按位求和)
本文介绍了执行按位求和的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

作为复杂聚合的一部分,我想知道一些数据的按位总和,即如果我有值为 1,1,1,2,2,8 的行,按位 sum 是 11.在这种情况下,这些值都是 2 的精确幂(单个位),因此我可以通过对组进行分组和求和来绕过它(显然,与实际查询相比,这个示例有点受折磨)):

As part of a complex aggregate I want to know the bitwise sum of some data, i.e. if I have rows with values 1,1,1,2,2,8 the bitwise sum is 11. In this case the values are all exact powers of two (single bits), so I can hack around it by grouping and summing over the groups (obviously this example is a bit tortured compared to the real query):

select SUM(y.test)
from (
    select x.test
    from ( -- garbage test data
        select 1 as [test]
        union all select 1
        union all select 1
        union all select 2
        union all select 2
        union all select 8) x
group by x.test) y

但是有没有一种干净的方法可以在 [T]SQL 中执行按位求和?

but is there a clean way to perform a bitwise sum in [T]SQL?

推荐答案

如果您的所有测试值都是单个位,如您的示例 (1, 2, 8) - 只需使用 SUM(DISTINCT col) 在您的查询中.

If all of your test values are single bits as in your example (1, 2, 8) - simply use SUM(DISTINCT col) in your query.

希望有所帮助.

(参考:http://msdn.microsoft.com/en-us/library/ms187810.aspx)

这篇关于执行按位求和的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Number of working days between two dates(两个日期之间的工作日数)
How do I use dateadd to get the first day of last year?(如何使用 dateadd 获取去年的第一天?)
SQL- Count occurrences of a specific word within all stored procedures(SQL- 计算所有存储过程中特定单词的出现次数)
SQL query to make a column of numbers a string(使一列数字成为字符串的 SQL 查询)
T-SQL: Best way to replace NULL with most recent non-null value?(T-SQL:用最新的非空值替换 NULL 的最佳方法?)
Count days in date range with set of exclusions which may overlap(使用一组可能重叠的排除项计算日期范围内的天数)