У меня есть таблица имен и числовых значений, и я хочу суммировать значения, сгруппированные по именам.Эта часть проста:
SELECT
name,
SUM(my_value) "MyValue"
FROM my_table
GROUP BY name
Но у меня также есть строка 'UNLIMITED' в значениях.Когда в группе есть «НЕОГРАНИЧЕННЫЙ», я просто хочу выбрать значение «НЕОГРАНИЧЕННЫЙ» и не делать никаких сумм.Это то, что я придумал, используя UNION, но я знаю, что есть лучший способ:
SELECT
name,
MAX("MyValue")
FROM (
SELECT
name,
'UNLIMITED' "MyValue"
FROM my_table
WHERE my_value = 'UNLIMITED'
GROUP BY name
UNION
SELECT
name,
TO_CHAR(SUM(
CASE WHEN my_value = 'UNLIMITED'
THEN '0'
ELSE my_value END
)) "MyValue"
FROM my_table
GROUP BY name
) t
GROUP BY name
Пожалуйста, проверьте SqlFiddle для реального примера.
Таблица примеров
NAME MY_VALUE
name1 50
name1 20
name2 30
name2 UNLIMITED
Пример желаемого результата
NAME SUM("MYVALUE")
name1 70
name2 UNLIMITED