如何根据 id 过滤条件对多行求和?
How to sum multiple rows based on the id filter criteria?
我有 table,record_id
和 record_value
。查询应该 return 所有 id 和值,但同时我需要 return 对特定组的 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
查询我有 returns 行的 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 应该 return 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
。
- 您不能在一个查询中使用多个结果。您可以尝试使用 UNION ALL
- 如果您使用 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
我有 table,record_id
和 record_value
。查询应该 return 所有 id 和值,但同时我需要 return 对特定组的 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
查询我有 returns 行的 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 应该 return 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
。
- 您不能在一个查询中使用多个结果。您可以尝试使用 UNION ALL
- 如果您使用 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