• Domingo 22 de Diciembre de 2024, 04:19

Autor Tema:  Sumar Campos con Condiciones  (Leído 3983 veces)

DasGrun

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Sumar Campos con Condiciones
« en: Jueves 8 de Abril de 2010, 22:43 »
0
Buenas, Necesito que me ayuden con el siguiente analisis.

Este es un query; en la columna SALDO cuando el campo DOCTYPE es diferente a 6 y 5 entonces la sumatoria del campo CURTRXAM es positivo de lo contrario es 0.00 y en la columna SALDO1 cuando el campo DOCTYPE es igual a 5 y 6 entonces la sumatoria del campo CURTRXAM es Negativo multiplicandolo por -1 de lo contrario es cero.

el objetivo de este query es presentar cada uno de los vendedores con su ID, Nombre y el saldo. y este campo saldo es la sumatoria del campo SALDO + SALDO1, el resultado en algunos registros me lo presenta mas de una vez(adelante lo verificaran en negrita)

Código: SQL
  1. SELECT DISTINCT
  2.   dbo.PM.VENDORID,
  3.   dbo.PM00.VENDNAME,
  4.   SALDO = (CASE WHEN(dbo.PM.DOCTYPE <> 6 AND dbo.PM.DOCTYPE <> 5) THEN SUM(dbo.PM.CURTRXAM) ELSE '0.00' END) AS FIELD_1,
  5.   SALDO1 = (CASE WHEN(dbo.PM.DOCTYPE = 6 AND dbo.PM.DOCTYPE = 5) THEN '0.00' ELSE SUM(dbo.PM.CURTRXAM) *-1 END) AS FIELD_2
  6. FROM
  7.   dbo.PM
  8.   INNER JOIN dbo.PM00 ON (dbo.PM.VENDORID = dbo.PM00.VENDORID)
  9. GROUP BY
  10.   dbo.PM.VENDORID,
  11.   dbo.PM00.VENDNAME,
  12.   dbo.PM.DOCTYPE
  13.  

el resultado que me presenta es el siguiente:
VENDORID                   VENDNAME                                                                       SALDO                              SALDO1[/b]
05019003077924    BOMBAS Y MOTORES DE HONDURAS, S.A. DE C.V               87810.69                              -87810.69
05019006481226    CORPORACION LA CUMBRE,S.A.                                         0                                      -60001.26
[b]05019007078665    CERAMIC'S STORE AND PLUS, S.A.                                      0                                      -50000
05019007078665    CERAMIC'S STORE AND PLUS, S.A.                                      0                                      -17000
05019007078665    CERAMIC'S STORE AND PLUS, S.A.                                      44044.44                              -44044.44
05019008191648    SERVICIOS INTEROCEANICOS, S.A DE C.V.                          0                                      -208206.49[/b]

lo que necesito es que me presente es lo siguiente:

VENDORID                   VENDNAME                                                                       SALDO                              SALDO1     SALDO_TOTAL
05019003077924    BOMBAS Y MOTORES DE HONDURAS, S.A. DE C.V                87810.69                              -87810.69                      0
05019006481226    CORPORACION LA CUMBRE,S.A.                                          0                                      -60001.26                      -60001.26
05019007078665    CERAMIC'S STORE AND PLUS, S.A.                                      0                                      -50000 No debe de presentrase                        
05019007078665    CERAMIC'S STORE AND PLUS, S.A.                                      0                                      -17000  No debe de Presentrase
05019007078665    CERAMIC'S STORE AND PLUS, S.A.                                      44044.44                              -44044.44 -67000

05019008191648    SERVICIOS INTEROCEANICOS, S.A DE C.V.                           0                                      -208206.49

Espero que me comprenda con el analisis de esta consulta sql, de ante mano le agradezco con su ayuda y con su tiempo.
Gracias

Shiquilla

  • Miembro MUY activo
  • ***
  • Mensajes: 188
  • Nacionalidad: es
    • Ver Perfil
    • http://www.songesoft.com
Re: Sumar Campos con Condiciones
« Respuesta #1 en: Lunes 19 de Abril de 2010, 10:54 »
0
Hay que sacar el SUM fuera del CASE. Quedaría así:

Código: SQL
  1. SELECT DISTINCT
  2.    dbo.PM.VENDORID,
  3.    dbo.PM00.VENDNAME,
  4.    SALDO = SUM(CASE WHEN(dbo.PM.DOCTYPE <> 6 AND dbo.PM.DOCTYPE <> 5) THEN PM.CURTRXAM ELSE 0 END) AS FIELD_1,
  5.    SALDO1 = SUM(CASE WHEN(dbo.PM.DOCTYPE = 6 AND dbo.PM.DOCTYPE = 5) THEN 0 ELSE dbo.PM.CURTRXAM * -1 END) AS FIELD_2
  6.  FROM
  7.    dbo.PM
  8.    INNER JOIN dbo.PM00 ON (dbo.PM.VENDORID = dbo.PM00.VENDORID)
  9.  GROUP BY
  10.    dbo.PM.VENDORID,
  11.    dbo.PM00.VENDNAME,
  12.    dbo.PM.DOCTYPE
  13.  

Saludos,
« §hÿqµïllæ »

DasGrun

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Sumar Campos con Condiciones
« Respuesta #2 en: Lunes 19 de Abril de 2010, 16:20 »
0
Me Presenta el MIsmo Resultado, lo que pienso hacerlo por medio de Union all, estamos en periodo de Prueba haber que es lo que presenta.

De Ante Mano Muchas Gracias.

Shiquilla

  • Miembro MUY activo
  • ***
  • Mensajes: 188
  • Nacionalidad: es
    • Ver Perfil
    • http://www.songesoft.com
Re: Sumar Campos con Condiciones
« Respuesta #3 en: Lunes 19 de Abril de 2010, 16:27 »
0
Perdón,me equivoqué en una línea, hay un error en la condición
Código: SQL
  1. SUM(CASE WHEN(dbo.PM.DOCTYPE = 6 AND dbo.PM.DOCTYPE = 5) THEN 0 ELSE dbo.PM.CURTRXAM * -1 END) AS FIELD_2
  2.  

Cambiar por:
Código: SQL
  1. SUM(CASE WHEN(dbo.PM.DOCTYPE = 6 OR dbo.PM.DOCTYPE = 5) THEN 0 ELSE dbo.PM.CURTRXAM * -1 END) AS FIELD_2
  2.  

Código: SQL
  1. SELECT DISTINCT
  2.     dbo.PM.VENDORID,
  3.     dbo.PM00.VENDNAME,
  4.     SALDO = SUM(CASE WHEN(dbo.PM.DOCTYPE <> 6 AND dbo.PM.DOCTYPE <> 5) THEN PM.CURTRXAM ELSE 0 END) AS FIELD_1,
  5.     SALDO1 = SUM(CASE WHEN(dbo.PM.DOCTYPE = 6 OR dbo.PM.DOCTYPE = 5) THEN 0 ELSE dbo.PM.CURTRXAM * -1 END) AS FIELD_2
  6.   FROM
  7.     dbo.PM
  8.     INNER JOIN dbo.PM00 ON (dbo.PM.VENDORID = dbo.PM00.VENDORID)
  9.   GROUP BY
  10.     dbo.PM.VENDORID,
  11.     dbo.PM00.VENDNAME,
  12.     dbo.PM.DOCTYPE
  13.  

Saludos,
« §hÿqµïllæ »

Shiquilla

  • Miembro MUY activo
  • ***
  • Mensajes: 188
  • Nacionalidad: es
    • Ver Perfil
    • http://www.songesoft.com
Re: Sumar Campos con Condiciones
« Respuesta #4 en: Lunes 19 de Abril de 2010, 16:35 »
0
También, he visto en tu mensaje que dices que te presenta el mismo resultado más de una vez (repetidas), eso es por la agrupación que tienes.
Código: SQL
  1. dbo.PM.VENDORID, dbo.PM00.VENDNAME, dbo.PM.DOCTYPE
  2.  

Si la pones agrupada por cliente ya estaría (a no ser que DOCTYPE lo necesites para algo)
Código: SQL
  1. dbo.PM.VENDORID, dbo.PM00.VENDNAME
  2.  

Saludos,
« §hÿqµïllæ »

DasGrun

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Sumar Campos con Condiciones
« Respuesta #5 en: Jueves 22 de Abril de 2010, 20:12 »
0
Necesito el DOCTYPE para una condicion, pero aun si se lo quito al GROUP BY me informa el error que tengo que ingresarlo.

Gracias

Shiquilla

  • Miembro MUY activo
  • ***
  • Mensajes: 188
  • Nacionalidad: es
    • Ver Perfil
    • http://www.songesoft.com
Re: Sumar Campos con Condiciones
« Respuesta #6 en: Viernes 23 de Abril de 2010, 11:32 »
0
mmm, lo único que se me ocurre es que hagas esto:

He cambiado la agrupación para que: si DOCTYPE está entre de 5 ó 6 ponga un 1 y si es distinto ponga un 0, así sólo te devolverá dos filas por cada cliente, luego, sumarlo todo.

Código: SQL
  1. SELECT A.VENDORID, A.VENDNAME, SUM(A.FIELD_1) AS FIELD_1, SUM(A.FIELD_2) AS FIELD_2
  2. FROM (
  3. SELECT dbo.PM.VENDORID,
  4.      dbo.PM00.VENDNAME,
  5.      SALDO = SUM(CASE WHEN dbo.PM.DOCTYPE BETWEEN 5 AND 6 THEN 0 ELSE PM.CURTRXAM END) AS FIELD_1,
  6.      SALDO1 = SUM(CASE WHEN dbo.PM.DOCTYPE BETWEEN 5 AND 6 THEN dbo.PM.CURTRXAM * -1 ELSE 0 END) AS FIELD_2
  7. FROM dbo.PM INNER JOIN dbo.PM00 ON (dbo.PM.VENDORID = dbo.PM00.VENDORID)
  8. GROUP BY dbo.PM.VENDORID, dbo.PM00.VENDNAME, CASE WHEN dbo.PM.DOCTYPE BETWEEN 5 AND 6 THEN 1 ELSE 0 END
  9. ) A
  10. GROUP BY A.VENDORID, A.VENDNAME
  11.  

Saludos,
« §hÿqµïllæ »