在SAS Enterprise Guide环境中的teradata proc sql中,我试图通过将两个字段相乘来创建一列,但是我一直遇到溢出问题。在选择陈述中如何在结果字段中指定小数位数?数值(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个十进制数字,则需要将值分成两个字段。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句