代码之家  ›  专栏  ›  技术社区  ›  espresso_coffee

如何根据id筛选条件对多行求和?

  •  1
  • espresso_coffee  · 技术社区  · 7 年前

    record_id record_value . 查询应该返回所有id和值,但同时我需要返回特定id组的总和。以下是我的数据示例:

    record_id    record_value   
    54               3
    56               0
    78               11
    98               7
    103              1
    78               0
    44               0
    67               1
    68               3
    69               1
    

    我拥有的查询返回具有id和值的行。我还想在查询结果中获得其中一些列。以下是我尝试过的:

    SELECT 
        record_id, 
        record_value 
    
        CASE 
            WHEN record_id IN ('54','56','67','68','69') THEN SUM(record_value) 
            ELSE ''
        END AS RowSum
    FROM Records
    

    行和应该返回 19 但是我得到了一个错误:

    SQL Error [257] [37000]: Implicit conversion from datatype 'VARCHAR' to 'NUMERIC' is not allowed.  Use the CONVERT function to run this query.
    

    我用 Sybase DBeaver .

    1 回复  |  直到 7 年前
        1
  •  1
  •   Adam Leszczyński    7 年前
    1. 不能在一个查询中使用多个结果。你可以试着用一支钢笔 联合所有
    2. 如果您使用CASE,那么两个WHERE子句应该具有相同的类型。您使用了一个数字(表示总和)和一个VARCHAR(表示空字符串“”)。你需要把它们统一起来。

    您可能使用的代码是:

    SELECT 
        record_id, 
        record_value, 
    FROM Records
    union all
    select null,
        CASE 
            WHEN record_id IN ('54','56','67','68','69') THEN convert(varchar, SUM(record_value)) 
            ELSE ''
        END AS RowSum
    
    推荐文章