2013-07-01 28 views
1

为什么我在这个输出中得到整数(我期待DECIMAL) 数据库的风格是Teradata 我在做什么错?Integer而不是DECIMAL

CASE WHEN sub_e.LSD IS NOT NULL THEN CAST(baba.amt AS DECIMAL(10,2)) 
ELSE 0 
END 
- 
(
SUM(
    CASE 

     WHEN sub_e.LSD IS NOT NULL   
     THEN ch.actv_amt * (1 + ch.tax_percent_rate/100) 

    ELSE 0 

    END 
    ) 
) 
+ 
CASE WHEN 
       sub_e.LSD IS NOT NULL THEN COALESCE(sub_e.PWC, 0) 
ELSE 0 
END     

    AS ODTS, 
+2

你是否确实是INT? 您是否通过添加列类型(ODTS)来检查它? 基于“CAST baba-mnt AS DECIMAL(10,2)”,生成的数据类型应该是DECIMAL。 你可以显示所有这些列的数据类型吗? – dnoeth

+0

谢谢你的答案 - 问题出在上面的查询结果中的表内的一个solumn的定义INSERT – Adam

回答

0

的问题是在表内solumn的定义,其中如果TAX_RATE_PERCENT没有被定义为一个DECIMAL足够的精度那么上面的查询的结果是做INSERT

1

您计算(1 + TAX_RATE_PERCENT/100)将不正确。

SELECT 6/100; -- 0 (zero - Integer division)

SELECT 6.0/100; -- 0.1 (rounding rules based on precision of numerator)

SELECT 6.00/100; -- 0.06 (expected answer)

SELECT CAST(6 AS DECIMAL(2,1))/100; -- 0.1 (rounding rules based on precision of numerator)

SELECT CAST(6 AS DECIMAL(3,2))/100; -- 0.06 (expected answer)

对于Teradata的有关DECIMAL数据类型行为的详细信息请参见Dnoeth的解释here

+0

这正是答案,给出了我的问题的最佳解决方案。非常感谢您的反馈。 – Adam

+0

添加到您的其他问题的链接与Dnoeth对Teradata中十进制运算结果精度的更精确的回答。 –

相关问题