如何根据ID过滤条件求和多行?

时间:2019-02-08 16:09:20

标签: sum aggregate-functions sybase dbeaver

我有record_idrecord_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

RowSum应该返回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 个答案:

答案 0 :(得分:1)

  1. 您不能在一个查询中使用多个结果。您可以尝试使用 UNION ALL
  2. 如果使用CASE,则两个WHERE子句都应具有相同的类型。您使用了NUMERIC(用于SUM)和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