2015-06-18 2 views
0

Я хочу, чтобы выполнить этот запрос на официальном Teradata Express, для VMware Player (TDE 15.00.01 SLES 10 для VMware (40GB) с точки зрения):SQL Teradata порядок оценки случая, когда тогда еще

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; 

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

Executed as Single statement. Failed [2616 : 22003] Numeric overflow occurred during computation. Elapsed time = 00:00:00.115

STATEMENT 1: Select Statement failed.

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

+0

Не знаю много о teradata, но, возможно, вам просто нужно передать любое значение, которое вы передаете в SUM, MIN, MAX ... в более широкий тип данных (INT => BIGINT?), Чтобы он не переполнялся. (например, в SQL Server, например: http://stackoverflow.com/a/1222890/2186023) – DrCopyPaste

ответ

0

Основываясь на комментарий DrCopyPaste «s, решение:

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; 

Спасибо!

Смежные вопросы