none
Consulta sql RRS feed

  • 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.Cantidad

    Esa 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 

    lunes, 5 de marzo de 2018 12:12

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



    lunes, 5 de marzo de 2018 12:47

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.

    lunes, 5 de marzo de 2018 12:39
  • 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.Cantidad

    Esa parte que resalte en negrita no esta asignando a varSaldo el valor?

    Saludos

    lunes, 5 de marzo de 2018 12:40
  • 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



    lunes, 5 de marzo de 2018 12:47
  • 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.

    lunes, 5 de marzo de 2018 17:14