SQL Teradata 的评估顺序大小写时,否则



我想在官方 Teradata Express for VMware Player 上运行此查询(TDE 15.00.01 SLES 10 for VMware (40GB) with 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;

但是我收到此错误:

作为单个语句执行。 失败 [2616:22003] 数字溢出 在计算过程中发生。 已用时间 = 00:00:00.115

语句 1:选择语句失败。

所以我的问题是,当 CASE 逻辑为 True 时,为什么要评估 ELSE 语句?如何运行此查询?我想要来自未知表的 COUNT、MIN、MAX、AVG、SUM 等信息,我不知道一列是否包含 20 位长的数字。谢谢!

根据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;

谢谢!

最新更新