Как суммировать несколько строк на основе критериев фильтра идентификаторов? - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть таблица с record_id и record_value.Запрос должен возвращать все идентификаторы и значения, но в то же время мне нужно возвращать сумму для определенной группы идентификаторов.Вот пример моих данных:

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

Мой запрос возвращает строки с идентификаторами и значениями.Я хотел бы получить некоторые из этих столбцов в результате запроса.Вот что я попробовал:

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 голосов
/ 10 февраля 2019
  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
...