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;
Спасибо!