Domingo 22 de Diciembre de 2024, 14:07
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Bases de Datos
»
SQL Server
(Moderador:
ElNapster
) »
Sumar Campos con Condiciones
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Sumar Campos con Condiciones (Leído 3990 veces)
DasGrun
Nuevo Miembro
Mensajes: 3
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
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_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
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
Tweet
Shiquilla
Miembro MUY activo
Mensajes: 188
Nacionalidad:
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
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,
« §hÿqµïllæ »
DasGrun
Nuevo Miembro
Mensajes: 3
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:
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
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,
« §hÿqµïllæ »
Shiquilla
Miembro MUY activo
Mensajes: 188
Nacionalidad:
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
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,
« §hÿqµïllæ »
DasGrun
Nuevo Miembro
Mensajes: 3
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:
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
SELECT
A
.
VENDORID
,
A
.
VENDNAME
,
SUM
(
A
.
FIELD_1
)
AS
FIELD_1
,
SUM
(
A
.
FIELD_2
)
AS
FIELD_2
FROM
(
SELECT
dbo
.
PM
.
VENDORID
,
dbo
.
PM00
.
VENDNAME
,
SALDO
=
SUM
(
CASE
WHEN
dbo
.
PM
.
DOCTYPE
BETWEEN
5
AND
6
THEN
0
ELSE
PM
.
CURTRXAM
END
)
AS
FIELD_1
,
SALDO1
=
SUM
(
CASE
WHEN
dbo
.
PM
.
DOCTYPE
BETWEEN
5
AND
6
THEN
dbo
.
PM
.
CURTRXAM
*
-
1
ELSE
0
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
,
CASE
WHEN
dbo
.
PM
.
DOCTYPE
BETWEEN
5
AND
6
THEN
1
ELSE
0
END
)
A
GROUP
BY
A
.
VENDORID
,
A
.
VENDNAME
Saludos,
« §hÿqµïllæ »
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Bases de Datos
»
SQL Server
(Moderador:
ElNapster
) »
Sumar Campos con Condiciones