1

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

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,
4

2 回答 2

1

如果TAX_RATE_PERCENT没有定义为DECIMAL足够精确的,那么您的计算(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 在此处的解释。

于 2013-07-02T16:21:55.140 回答
0

问题出在表内的一个 slumn 的定义中,上面的查询结果正在执行 INSERT

于 2013-07-01T14:33:18.690 回答