如何在一个单元格SQL中总结值

时间:2016-07-20 05:01:41

标签: sql sql-server binary sum frequency

我有一些二进制值,例如00,0000,001000.11111000,11111100000

我需要总结它,所以它变成0,0,1,5,5(总和0和1s)

我们怎样才能在SQL中做到这一点?

由于

3 个答案:

答案 0 :(得分:0)

使用以下查询。如果需要,将其转换为函数。

create function dbo.fnSumChars(@someInt VARCHAR(20))
RETURNS INT
AS
BEGIN
 DECLARE @count INT = LEN(@someInt),
            @counter INT = 1

    DECLARE @Sum INT = 0

    WHILE @counter <= @count
    BEGIN
        SELECT @sum += CAST(SUBSTRING(CAST(@someInt AS VARCHAR), @counter, 1) AS int)
        SELECT @counter += 1
    END

    RETURN @sum --5
END

这是函数,您可以像下面这样调用此函数

SELECT dbo.fnSumChars('1111100000')

答案 1 :(得分:0)

假设:

  1. 二进制值存储为字符串。
  2. 每个值都在表中的单元格中。就像是:
    BinaryValues (Consider it a column name)
    00
    0000
    001000
    
    等等。
  3. 您希望将各个数字相加以获得总和。
  4. 您使用的SQL产品支持函数,循环,字符串操作,如子字符串,提取字符串长度等。

    根据我的最佳知识,这些是所有SQL产品中可用的原语。
  5. 解决方案:

    编写一个函数(以任何名称调用它。例如: AddBinaryDigits ),它将以字符串格式的二进制值作为输入。

    在函数内部并进行字符串操作。提取每个数字并将其添加。返回总和作为结果。 调用功能:

    如果使用存储在表中的二进制值:

    SELECT AddBinaryDigits(BinaryValues) FROM <WhatEverTableName>
    

    如果使用固定值:

    SELECT AddBinaryDigits('00')
    SELECT AddBinaryDigits('0000')
    SELECT AddBinaryDigits('001000')
    

    等等。

    编辑包含创建功能的请求。

    CREATE FUNCTION <funtionName>   
    (
    @ParameterName AS VARCHAR(expected string length like 10/15/20 etc.)
    )
    RETURNS INT
    BEGIN   
        SQL Code to sum
        RETURN SummedUpValue
    END
    

答案 2 :(得分:0)

如果这些已经是字符串格式,这是最简单的:

select len(replace('1111100000', '0', ''))

也不需要函数,因为它可以在查询中内联。功能,即使是轻功能,也会导致性能损失。