none
Suma con Case when sin GROUP BY. RRS feed

  • Pregunta

  • Estimados muy buenos días. 

    Resulta que estoy intentando realizar una consulta que sume un campo numérico, siempre cuidando el id del tipo de moneda asociado al concepto para poder transformarlo con un factor a USD y así tener un resultado homogenio bajo un solo tipo de moneda.

    select sum(cast(COMPRA as numeric(15, 2))) * case
                                                          when MONEDA_COMPRA in(790)
                                                          then 0.25
                                                          else case
                                                                   when MONEDA_COMPRA in(978)
                                                                   then 1.11
                                                                   else 1 -- 
                                                               end
                                                      end as Amount
    from CONCEPTOS 
    where(COTIZACION_ID = '2019')
         and (CLASE in('O', 'F'))
    and (MODO_PAGO= 1)
    and (DESCIPCION= '')
    

    el tema es que el motor de base de datos me pide que agrupe por moneda_compra para realizar la consulta, pero esto me retorna mas de una fila dado que una cotización puede tener conceptos con distintos tipos de moneda. 

    He probado con sacar el case when y funciona perfecto, salvo que la suma de los valores es errada por que estoy sumando montos con un moneda_compra distintas.

    desde ya agradecido por sus sugerencias. 

    miércoles, 22 de enero de 2020 13:25

Respuestas

  • Hola jcc2018:

    Una solución es utilizar una tabla derivada para tu consulta, y luego la salida, realizar la suma

    GO
    SELECT SUM(cast(AMOUNT as numeric(15,2))) as amount FROM (
    select sum(cast(COMPRA as numeric(15, 2))) * case
                                                          when MONEDA_COMPRA in(790)
                                                          then 0.25
                                                          else case
                                                                   when MONEDA_COMPRA in(978)
                                                                   then 1.11
                                                                   else 1 -- 
                                                               end
                                                      end as Amount
    from CONCEPTOS 
    where(COTIZACION_ID = '2019')
         and (CLASE in('O', 'F'))
    and (MODO_PAGO= 1)
    and (DESCIPCION= '')
    GROUP BY conceptos.MONEDA_COMPRA
    ) AS Result

    Salida

    136.00

    Tablas derivadas

    https://javifer2.wordpress.com/2019/11/06/tabla-derivada/

    • Propuesto como respuesta Pablo RubioModerator miércoles, 22 de enero de 2020 15:43
    • Marcado como respuesta jcc2018 sábado, 6 de junio de 2020 1:48
    miércoles, 22 de enero de 2020 14:49

Todas las respuestas

  • Hola jcc2018:

    Una solución es utilizar una tabla derivada para tu consulta, y luego la salida, realizar la suma

    GO
    SELECT SUM(cast(AMOUNT as numeric(15,2))) as amount FROM (
    select sum(cast(COMPRA as numeric(15, 2))) * case
                                                          when MONEDA_COMPRA in(790)
                                                          then 0.25
                                                          else case
                                                                   when MONEDA_COMPRA in(978)
                                                                   then 1.11
                                                                   else 1 -- 
                                                               end
                                                      end as Amount
    from CONCEPTOS 
    where(COTIZACION_ID = '2019')
         and (CLASE in('O', 'F'))
    and (MODO_PAGO= 1)
    and (DESCIPCION= '')
    GROUP BY conceptos.MONEDA_COMPRA
    ) AS Result

    Salida

    136.00

    Tablas derivadas

    https://javifer2.wordpress.com/2019/11/06/tabla-derivada/

    • Propuesto como respuesta Pablo RubioModerator miércoles, 22 de enero de 2020 15:43
    • Marcado como respuesta jcc2018 sábado, 6 de junio de 2020 1:48
    miércoles, 22 de enero de 2020 14:49
  • Muchas gracias por su aporte. Su solución a sido conveniente para mi.
    sábado, 6 de junio de 2020 1:48