Principales respuestas
Consulta sql

Pregunta
-
Buen dia, tengo la siguiente consulta en sql pero no me muestra el resultado que necesito:
DECLARE @varSaldo Decimal(10,2);
SELECT v.idVenta AS 'Nro.', v.Fecha, (c.RazonSocial) AS Cliente, v.Cantidad, v.Total, ISNULL(SUM(p.Monto),0) 'Pagado',varSaldo= (ISNULL(v.Total,0) - ISNULL(SUM(p.Monto),0))
from ventas v
INNER JOIN clientes c ON c.idCliente = v.idCliente
LEFT JOIn ventas_pagos p On p.idVenta = v.idVenta
WHERE v.idFormasPago=4 AND @varSaldo<>'0'
GROUP BY v.idVenta,c.RazonSocial, v.Fecha, v.Total, v.CantidadEsa es mi consulta y tengo varias lineas con saldo distinto de cero y no me las muestra
No me muestra ni los saldos en cero ni los distintos a cero, me muestra una consulta vacia
Respuestas
-
Hola!
En la captura que mandas nos se ve el campo v.idFormasPago.
Yo personalmente lo primero que haría es quitar las comillas a la condición [<> '0'].
Ademas no puede hacer un select que te devuelva campos, mezclado con un select que se igualen a variables el resultado obtenido, @varSaldo.
Hazlo por pasos: primero muestra todas las líneas antes de agruparlo. Cuando te cerciores que esas son las líneas con las que tienes que operar haz los group by. Y a continuación haz un select por encima:
select * from ( 'Aquí debe ir tu select agrupado ) as Expr1 Where Expr1.AlgunCampo <> 0
- Editado Roque Santos lunes, 5 de marzo de 2018 12:48
- Marcado como respuesta Mauricio Hamak lunes, 5 de marzo de 2018 13:14
Todas las respuestas
-
Si te sale la consulta vacia, quiere decir que alguno de los filtros o Joins no se esta cumpliendo. Pero es practicamente imposible decir a simple vista cual es el que falla, sobre todo sin conocer las tablas y los datos que contienen. Yo lo que hago en estos casos es ir retirando partes de la consulta hasta que si que entrega resultados, y de esa manera se que la ultima parte que retire era la que no estaba correctamente configurada y estaba causando el problema. Entonces reexamino esa parte comparandola con los datos que hay en las tablas y corrijo lo que haga falta.
Por ejemplo, una cosa que veo rara es que declaras @varsaldo y luego lo usas en el where sin asignarle valor, con lo que nunca se cumplira el where. Si el problema fuera efectivamente ese, lo detectarias inmediatamente siguiendo el proceso explicado arriba, porque la consulta comenzaria a entregar resultados en el momento de suprimir del where esa parte.
-
Hola Alberto es asi como decis, pero como le asigno a varSaldo el valor?
DECLARE @varSaldo Decimal(10,2);
SELECT v.idVenta AS 'Nro.', v.Fecha, (c.RazonSocial) AS Cliente, v.Cantidad, v.Total, ISNULL(SUM(p.Monto),0) 'Pagado',varSaldo= (ISNULL(v.Total,0) - ISNULL(SUM(p.Monto),0))
from ventas v
INNER JOIN clientes c ON c.idCliente = v.idCliente
LEFT JOIn ventas_pagos p On p.idVenta = v.idVenta
WHERE v.idFormasPago=4 AND @varSaldo<>'0'
GROUP BY v.idVenta,c.RazonSocial, v.Fecha, v.Total, v.CantidadEsa parte que resalte en negrita no esta asignando a varSaldo el valor?
Saludos
-
Hola!
En la captura que mandas nos se ve el campo v.idFormasPago.
Yo personalmente lo primero que haría es quitar las comillas a la condición [<> '0'].
Ademas no puede hacer un select que te devuelva campos, mezclado con un select que se igualen a variables el resultado obtenido, @varSaldo.
Hazlo por pasos: primero muestra todas las líneas antes de agruparlo. Cuando te cerciores que esas son las líneas con las que tienes que operar haz los group by. Y a continuación haz un select por encima:
select * from ( 'Aquí debe ir tu select agrupado ) as Expr1 Where Expr1.AlgunCampo <> 0
- Editado Roque Santos lunes, 5 de marzo de 2018 12:48
- Marcado como respuesta Mauricio Hamak lunes, 5 de marzo de 2018 13:14
-
Esa parte que resalte en negrita no esta asignando a varSaldo el valor?
No, solo está creando un alias para el nombre de la columna. Es lo mismo que si hubieras escrito
... (ISNULL(v.Total,0) - ISNULL(SUM(p.Monto),0)) AS varSaldo
Para asignar el valor a una variable tiene que tener la @ a la izquierda: @varSaldo=...
Pero no puedes combiar esa asignación de variable en la lista de selección con usar simultáneamente la misma variable en el "where". Tendrás que replantear lo que quieres hacer usando una sintaxis diferente, posiblemente primero hacer la select, y luego procesar los resultados para aplicarles un filttro. Pero no te sé decir cuál sería exactamente la solución adecuada porque no comprendo qué es lo que pretendes conseguir con ese doble-uso de la variable.
- Propuesto como respuesta Juan MondragónModerator martes, 6 de marzo de 2018 23:43