SQL Teradata порядок оценки случая, когда тогда еще

Я хочу выполнить этот запрос на официальном Teradata Express для VMware Player (TDE 15.00.01 SLES 10 для VMware (40 ГБ) с Viewpoint):

SELECT 'MaxValue' column_name,
       COUNT("MaxValue") AS count_value,
       COUNT(DISTINCT("MaxValue")) AS count_dist_value,
       MIN("MaxValue") AS min_value,
       MAX("MaxValue") AS max_value,
       CASE WHEN max_value > 99999999999999 THEN 99999999999999
            ELSE SUM("MaxValue") END AS sum_value
FROM (SELECT TOP 100 * FROM "DBC"."IdCol") AS xy;

Но я получаю эту ошибку:

Выполняется как Единый оператор. Failed [2616: 22003] Числовое переполнение произошло во время вычисления. Истекшее время = 00:00:00.115

ЗАЯВЛЕНИЕ 1: Выбор заявления не удался.

Поэтому мой вопрос заключается в том, почему оператор ELSE оценивается, когда логика CASE равна True? И как я могу выполнить этот запрос? Я хочу получить информацию COUNT, MIN, MAX, AVG, SUM и т. Д. Из неизвестных таблиц, где я не знаю, содержит ли столбец 20-значные длинные числа или нет. Спасибо!

1 ответ

Основываясь на комментарии DrCopyPaste, решение состоит в следующем:

SELECT 'MaxValue' column_name,
       COUNT("MaxValue") AS count_value,
       COUNT(DISTINCT("MaxValue")) AS count_dist_value,
       MIN("MaxValue") AS min_value,
       MAX("MaxValue") AS max_value,
       CASE WHEN max_value > 99999999999999 THEN 99999999999999
            ELSE SUM(CAST("MaxValue" AS BIGINT)) END AS sum_value
FROM (SELECT TOP 100 * FROM "DBC"."IdCol") AS xy;

Спасибо!

Другие вопросы по тегам