在求和SQL中发出舍入小数

时间:2016-07-12 14:54:25

标签: sql sum rounding

我的查询有问题,舍入只适用于第一行,你知道为什么吗?

SELECT DISTINCT a.articulo AS articulo
    ,b.NombreArticulo AS nom_art
    ,sum(a.uni_vta_caja) AS Unidades
    ,round(sum(a.imp_vta_caja_neto), 2) AS Venta
    ,substring(cast(a.fec_vta AS VARCHAR), 4, 2) AS mes
FROM ConsultaDWH.dbo.F_Venta_21606 a
INNER JOIN consultadwh.dbo.articulos b ON a.articulo = b.articulo
WHERE a.Articulo IN (
        '1031260'
        ,'1031209'
        )
GROUP BY a.articulo
    ,b.NombreArticulo
    ,substring(cast(a.fec_vta AS VARCHAR), 4, 2)

结果显示:

articulo  nom_art                                   Unidades  Venta                 mes
1031209   Enutre Supl Alim Botellin 237ml Vainilla  686.0     14137.73              06
1031260   Enutre Supl Alim Botellin 237ml Fresa     597.0     12329.799999999999    06

查看.73和.9999999等。

1 个答案:

答案 0 :(得分:0)

如果您想要2位小数,则需要使用CAST代替ROUND

CAST(SUM(a.imp_vta_caja_neto) AS DECIMAL (8,2))

ROUND可能会产生误导,因为我们大多数人自然认为ROUND(123.123,1)应该输出一个小数位,123.1它实际上做的是舍入到第一个小数位的精度,{{ 1}}。如果要在输出中使用明确的小数位数,则使用123.100作为十进制来实现此目的。 CAST = CAST(123.123 as decimal (8,1))