none
Dificultades con el ROUND RRS feed

  • Pregunta

  • Buen dia Expertos , estoy desarrollando en SQL 2012

    tengo un problema al ejecutar, lo que deseo es que me salga 4 decimales COSTO_FINAL me registra con 6 decimales este es mi codigo...

    WITH Todos
    AS
    (
    SELECT GENERAL,CANTIDAD,PREC_UNIT,PREC_TOTAL FROM DETALLE_ENTRADA_ALMACEN  
    UNION ALL 
    SELECT GENERAL,-CANTIDAD,-PREC_UNIT,-PREC_TOTAL FROM DETALLE_SALIDA_ALMACEN
    )
    SELECT
    GENERAL, SUM(CANTIDAD) AS STOCK, ROUND(ISNULL(SUM(PREC_TOTAL)/ NULLIF(ISNULL(SUM(CANTIDAD),0),0),0),4) AS COSTO_FINAL, SUM(PREC_TOTAL) AS COSTO_TOTAL
    FROM todos
    GROUP BY GENERAL

    me bota este resultado:

    como ven al final sigue quedando los 6 decimales aunque en mi round al final le puse "4" ... alguien me ayuda con este problemita gracias

    viernes, 25 de enero de 2019 20:07

Respuestas

  • Esta funcion es para redondear y no para cambiar el numero de decimales.  Usa CAST / CONVERT para ese caso.

    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    • Propuesto como respuesta Pablo RubioModerator viernes, 25 de enero de 2019 21:10
    • Marcado como respuesta mario gr lunes, 28 de enero de 2019 13:38
    viernes, 25 de enero de 2019 21:09
  • Hola mariogr:

    Tú código podría quedar así:

    DECLARE @DETALLE_ENTRADA_ALMACEN TABLE
    (GENERAL    VARCHAR(100), 
     CANTIDAD   DECIMAL(10, 5), 
     PREC_UNIT  DECIMAL(15, 7), 
     PREC_TOTAL DECIMAL(15, 7)
    );
    DECLARE @DETALLE_SALIDA_ALMACEN TABLE
    (GENERAL    VARCHAR(100), 
     CANTIDAD   DECIMAL(10, 5), 
     PREC_UNIT  DECIMAL(15, 7), 
     PREC_TOTAL DECIMAL(15, 7)
    );
    
    INSERT INTO @DETALLE_ENTRADA_ALMACEN
    (GENERAL, 
    CANTIDAD,
    PREC_UNIT,
    PREC_TOTAL) 
    VALUES
     ('AAA0000024',	50,  3.15,    157.50),
     ('ABR0000002',0,   0.00,     0.00),
     ('ABR0000015',0,   0.00,	  0.00),
     ('ABR0000017',19.0,8.473700, 161.00),
     ('DPG0000010',6,   15.50000, 93.00),
     ('DPG0000012',5.0, 16.68000, 83.40),
     ('DPG0000020',14,  10.0,	  140.00);
     
    
    ;WITH Todos
         AS (SELECT GENERAL, 
                    CANTIDAD, 
                    PREC_UNIT, 
                    PREC_TOTAL
             FROM @DETALLE_ENTRADA_ALMACEN
             UNION ALL
             SELECT GENERAL, 
                    -CANTIDAD, 
                    -PREC_UNIT, 
                    -PREC_TOTAL
             FROM @DETALLE_SALIDA_ALMACEN)
         SELECT GENERAL, 
                CAST(SUM(CANTIDAD) AS DECIMAL(10, 2)) AS STOCK, 
                CAST(ISNULL(SUM(PREC_TOTAL) / NULLIF(ISNULL(SUM(CANTIDAD), 0), 0), 0) AS DECIMAL(10, 4)) AS COSTO_FINAL, 
                CAST(SUM(PREC_TOTAL) AS DECIMAL(10, 2)) AS COSTO_TOTAL
         FROM todos
         GROUP BY GENERAL;

    • Marcado como respuesta mario gr lunes, 28 de enero de 2019 13:37
    viernes, 25 de enero de 2019 23:56
  • Hola:

    Si te lo puedo responder, del mejor modo posible

    select 
    cast(10.55550 as decimal(10,4)),
    cast(10.55551 as decimal(10,4)),
    cast(10.55552 as decimal(10,4)),
    cast(10.55553 as decimal(10,4)),
    cast(10.55554 as decimal(10,4)),
    cast(10.55555 as decimal(10,4)),
    cast(10.55556 as decimal(10,4)),
    cast(10.55557 as decimal(10,4)),
    cast(10.55558 as decimal(10,4)),
    cast(10.55559 as decimal(10,4))
    Por tanto, si redondea.

    • Marcado como respuesta mario gr lunes, 28 de enero de 2019 17:59
    lunes, 28 de enero de 2019 14:21

Todas las respuestas

  • Esta funcion es para redondear y no para cambiar el numero de decimales.  Usa CAST / CONVERT para ese caso.

    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    • Propuesto como respuesta Pablo RubioModerator viernes, 25 de enero de 2019 21:10
    • Marcado como respuesta mario gr lunes, 28 de enero de 2019 13:38
    viernes, 25 de enero de 2019 21:09
  • Hola mariogr:

    Tú código podría quedar así:

    DECLARE @DETALLE_ENTRADA_ALMACEN TABLE
    (GENERAL    VARCHAR(100), 
     CANTIDAD   DECIMAL(10, 5), 
     PREC_UNIT  DECIMAL(15, 7), 
     PREC_TOTAL DECIMAL(15, 7)
    );
    DECLARE @DETALLE_SALIDA_ALMACEN TABLE
    (GENERAL    VARCHAR(100), 
     CANTIDAD   DECIMAL(10, 5), 
     PREC_UNIT  DECIMAL(15, 7), 
     PREC_TOTAL DECIMAL(15, 7)
    );
    
    INSERT INTO @DETALLE_ENTRADA_ALMACEN
    (GENERAL, 
    CANTIDAD,
    PREC_UNIT,
    PREC_TOTAL) 
    VALUES
     ('AAA0000024',	50,  3.15,    157.50),
     ('ABR0000002',0,   0.00,     0.00),
     ('ABR0000015',0,   0.00,	  0.00),
     ('ABR0000017',19.0,8.473700, 161.00),
     ('DPG0000010',6,   15.50000, 93.00),
     ('DPG0000012',5.0, 16.68000, 83.40),
     ('DPG0000020',14,  10.0,	  140.00);
     
    
    ;WITH Todos
         AS (SELECT GENERAL, 
                    CANTIDAD, 
                    PREC_UNIT, 
                    PREC_TOTAL
             FROM @DETALLE_ENTRADA_ALMACEN
             UNION ALL
             SELECT GENERAL, 
                    -CANTIDAD, 
                    -PREC_UNIT, 
                    -PREC_TOTAL
             FROM @DETALLE_SALIDA_ALMACEN)
         SELECT GENERAL, 
                CAST(SUM(CANTIDAD) AS DECIMAL(10, 2)) AS STOCK, 
                CAST(ISNULL(SUM(PREC_TOTAL) / NULLIF(ISNULL(SUM(CANTIDAD), 0), 0), 0) AS DECIMAL(10, 4)) AS COSTO_FINAL, 
                CAST(SUM(PREC_TOTAL) AS DECIMAL(10, 2)) AS COSTO_TOTAL
         FROM todos
         GROUP BY GENERAL;

    • Marcado como respuesta mario gr lunes, 28 de enero de 2019 13:37
    viernes, 25 de enero de 2019 23:56
  • buen dia Javi Fernández F gracias por responder , me funciono perfectamente aunque no se si me puedas reponder esta curiosidad cuando el cast esta convirtiendo en 4 decimales tambien lo esta redondeando verdad?? gracias por tu ayuda
    lunes, 28 de enero de 2019 13:46
  • Hola:

    Si te lo puedo responder, del mejor modo posible

    select 
    cast(10.55550 as decimal(10,4)),
    cast(10.55551 as decimal(10,4)),
    cast(10.55552 as decimal(10,4)),
    cast(10.55553 as decimal(10,4)),
    cast(10.55554 as decimal(10,4)),
    cast(10.55555 as decimal(10,4)),
    cast(10.55556 as decimal(10,4)),
    cast(10.55557 as decimal(10,4)),
    cast(10.55558 as decimal(10,4)),
    cast(10.55559 as decimal(10,4))
    Por tanto, si redondea.

    • Marcado como respuesta mario gr lunes, 28 de enero de 2019 17:59
    lunes, 28 de enero de 2019 14:21
  • Muchas gracias Javi Fernández F por la ayuda.
    lunes, 28 de enero de 2019 17:59