none
Solicito su apoyo con un SELECT que filtra por Concepto, Rangos de Fecha y Vehiculo RRS feed

  • Pregunta

  • Saludos amigos, solicito de su ayuda para realizar este select que no me esta siendo funcional:

    Les dejo una imagen que me ayudara un poco en mi objetivo.

    Se indica Clasificación y Rango de fechas para filtrar hasta aquí no tengo problema, pero agregue un 4° parámetro que podrá ser opcional.

    SELECT [id_egresos], [id_tipo_egreso_padre], [cdescribe], [cfactura_ticket],

    [dfecha_comprobante], [crazon_social], [dimporte_total], [id_unidad_motriz] FROM [vEgresos] WHERE ((([dfecha_comprobante] between @dfecha_comprobante1 and @dfecha_comprobante2)

    AND ([id_tipo_egreso_padre] = @id_tipo_egreso_padre)) or ([id_unidad_motriz] = @s_id_Unidad_Motriz))

    ORDER BY [dfecha_comprobante], [id_egresos]


    No logro que valide la información cuando se indicar el parámetro 4 que reitero es OPCIONAL, cuando indico una unidad_motriz, cabe resaltar que tengo 2 unidades para clasificación GASTOS, FACTURAS y TICKETS pero mi select no es funcional cuando indico la unidad motriz

    Gracias por su atención amigos...


    • Editado Marco Bueno domingo, 27 de enero de 2019 2:15 Actualizacion
    domingo, 27 de enero de 2019 2:14

Respuestas

  • Hola Marco Bueno:

    Si lo he entendido, tu solución es así:

    DECLARE @dfecha_comprobante1 DATE;
    DECLARE @dfecha_comprobante2 DATE;
    DECLARE @id_tipo_egreso_padre INT;
    DECLARE @s_id_Unidad_Motriz INT;
    SELECT [id_egresos], 
           [id_tipo_egreso_padre], 
           [cdescribe], 
           [cfactura_ticket], 
           [dfecha_comprobante], 
           [crazon_social], 
           [dimporte_total], 
           [id_unidad_motriz]
    FROM [vEgresos]
    WHERE 
    [dfecha_comprobante] BETWEEN @dfecha_comprobante1 AND @dfecha_comprobante2
          AND [id_tipo_egreso_padre] = @id_tipo_egreso_padre
          AND ([id_unidad_motriz] = @s_id_Unidad_Motriz
               OR @s_id_Unidad_Motriz IS NULL)
    ORDER BY [dfecha_comprobante], 
             [id_egresos];

    Básicamente, quitar todos los paréntesis que tienes sobrantes, y luego relacionar id_unidad_motriz con el 4º parámetro siempre OR 4º parámetro is null, por tanto si se lo has pasado solo te devuelve los resultados que coincidan y si no se lo has pasado, también es válido.

    Espero te ayude.

    • Marcado como respuesta Marco Bueno domingo, 27 de enero de 2019 23:33
    domingo, 27 de enero de 2019 6:59