Bases de Datos > SQL Server
Sumar Campos con Condiciones
DasGrun:
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 ---SELECT DISTINCT dbo.PM.VENDORID, dbo.PM00.VENDNAME, SALDO = (CASE WHEN(dbo.PM.DOCTYPE <> 6 AND dbo.PM.DOCTYPE <> 5) THEN SUM(dbo.PM.CURTRXAM) ELSE '0.00' END) AS FIELD_1, SALDO1 = (CASE WHEN(dbo.PM.DOCTYPE = 6 AND dbo.PM.DOCTYPE = 5) THEN '0.00' ELSE SUM(dbo.PM.CURTRXAM) *-1 END) AS FIELD_2FROM dbo.PM INNER JOIN dbo.PM00 ON (dbo.PM.VENDORID = dbo.PM00.VENDORID)GROUP BY dbo.PM.VENDORID, dbo.PM00.VENDNAME, dbo.PM.DOCTYPE
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:
Hay que sacar el SUM fuera del CASE. Quedaría así:
--- Código: SQL ---SELECT DISTINCT dbo.PM.VENDORID, dbo.PM00.VENDNAME, SALDO = SUM(CASE WHEN(dbo.PM.DOCTYPE <> 6 AND dbo.PM.DOCTYPE <> 5) THEN PM.CURTRXAM ELSE 0 END) AS FIELD_1, SALDO1 = SUM(CASE WHEN(dbo.PM.DOCTYPE = 6 AND dbo.PM.DOCTYPE = 5) THEN 0 ELSE dbo.PM.CURTRXAM * -1 END) AS FIELD_2 FROM dbo.PM INNER JOIN dbo.PM00 ON (dbo.PM.VENDORID = dbo.PM00.VENDORID) GROUP BY dbo.PM.VENDORID, dbo.PM00.VENDNAME, dbo.PM.DOCTYPE
Saludos,
DasGrun:
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:
Perdón,me equivoqué en una línea, hay un error en la condición
--- Código: SQL ---SUM(CASE WHEN(dbo.PM.DOCTYPE = 6 AND dbo.PM.DOCTYPE = 5) THEN 0 ELSE dbo.PM.CURTRXAM * -1 END) AS FIELD_2
Cambiar por:
--- Código: SQL ---SUM(CASE WHEN(dbo.PM.DOCTYPE = 6 OR dbo.PM.DOCTYPE = 5) THEN 0 ELSE dbo.PM.CURTRXAM * -1 END) AS FIELD_2
--- Código: SQL ---SELECT DISTINCT dbo.PM.VENDORID, dbo.PM00.VENDNAME, SALDO = SUM(CASE WHEN(dbo.PM.DOCTYPE <> 6 AND dbo.PM.DOCTYPE <> 5) THEN PM.CURTRXAM ELSE 0 END) AS FIELD_1, SALDO1 = SUM(CASE WHEN(dbo.PM.DOCTYPE = 6 OR dbo.PM.DOCTYPE = 5) THEN 0 ELSE dbo.PM.CURTRXAM * -1 END) AS FIELD_2 FROM dbo.PM INNER JOIN dbo.PM00 ON (dbo.PM.VENDORID = dbo.PM00.VENDORID) GROUP BY dbo.PM.VENDORID, dbo.PM00.VENDNAME, dbo.PM.DOCTYPE
Saludos,
Shiquilla:
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 ---dbo.PM.VENDORID, dbo.PM00.VENDNAME, dbo.PM.DOCTYPE
Si la pones agrupada por cliente ya estaría (a no ser que DOCTYPE lo necesites para algo)
--- Código: SQL ---dbo.PM.VENDORID, dbo.PM00.VENDNAME
Saludos,
Navegación
[#] Página Siguiente
Ir a la versión completa