在 Select 语句期间定义 teradata 列中的小数位数

Defining number of decimals in teradata column during Select statement

在 SAS Enterprise Guide 环境中的 teradata proc sql 中,我试图通过将两个字段相乘来创建一个列,但我一直遇到溢出问题。如何在 Select 语句中指定结果字段中的小数位数?数字(20,2)

proc sql exec feedback stimer;

connect to teradata as teravw (authdomain=teradataauth TDPID=DWPROD2 MODE=TERADATA SCHEMA=EDW_NOPHI CONNECTION=GLOBAL);

CREATE TABLE WORK.tbl1 AS
SELECT * from connection to teravw
(SELECT

...
    ,case 
        when PCL.CLM_SOR_CD = '512' then cast(round(sum(PCL.PRCG_WHLSL_ALWBL_COST_AMT * CL.PAID_SRVC_UNIT_CNT) ,0.01) as numeric(20,2))
        else SUM(PCL.PRCG_WHLSL_ALWBL_COST_AMT) 
    end AS WAC 
...

);

disconnect from teravw;
quit;
run;

错误信息:

ERROR: Teradata row not delivered (trget): Numeric overflow occurred during computation.

SAS 将所有数字存储为 8 字节浮点数。有效小数位数最大小于20,你的值真的大于9,999,999,999,999.99吗?你试过 DECIMAL(15,2) 了吗?

您可以将值转换为 FLOAT 并在 SAS 端附加格式以仅显示 2 位小数。

create table my_dataset as
select wac format=20.2 
from connection to teradata (
   select cast( .... as FLOAT) as wac
   from ...
);

如果您确实需要精确存储 20 位十进制数字,那么您需要将该值拆分为两个字段。