Única consulta para hacer filtros avanzados con SQL SERVER


Y esta es la consulta aplicada a un filtro de productos con SQL SERVER.

SELECT dbo.PRODUCTOS.nombre_pro, dbo.PRODUCTOS.identificacion_pro, dbo.PRODUCTOS.precio_pro, dbo.PRODUCTOS.descripcion_pro,
CASE WHEN dbo.CATEGORIAS.identificacion_cat <= 2  THEN 1 ELSE 0 END AS 'tipoProducto',
CASE WHEN dbo.CATEGORIAS.identificacion_cat <= 2  THEN 0 ELSE 1 END AS 'tipoAncheta'


FROM dbo.PRODUCTOS 
INNER JOIN dbo.SUBCATEGORIAS
ON dbo.PRODUCTOS.identificacion_sub = dbo.SUBCATEGORIAS.identificacion_sub 
INNER JOIN dbo.CATEGORIAS 
ON dbo.SUBCATEGORIAS.identificacion_cat = dbo.CATEGORIAS.identificacion_cat
WHERE
(dbo.CATEGORIAS.identificacion_cat = @identificacion_cat OR @identificacion_cat = 'todos' )
AND
(dbo.SUBCATEGORIAS.identificacion_sub = @identificacion_sub OR @identificacion_sub = 'todos' )
AND
(dbo.PRODUCTOS.descripcion_pro + '' + dbo.PRODUCTOS.nombre_pro + '' + SUBCATEGORIAS.nombre_sub + '' + CATEGORIAS.nombre_cat + '' + PRODUCTOS.identificacion_pro  like '%' + @busqueda + '%' OR @busqueda = 'Todos' )
AND
(dbo.PRODUCTOS.precio_pro >=  @filtroPrecioMenor OR @filtroPrecioMenor = -1 )
AND
(dbo.PRODUCTOS.precio_pro <=  @filtroPrecioMayor OR @filtroPrecioMayor = -1 )
AND
(dbo.PRODUCTOS.activo_pro =  1 )
ORDER BY 
CASE
            WHEN @ordenPrecio = 'todos' THEN (RANK() OVER (ORDER BY dbo.PRODUCTOS.nombre_pro ))
            WHEN @ordenPrecio = 'ASC' THEN (RANK() OVER (ORDER BY dbo.PRODUCTOS.precio_pro ASC))
            WHEN @ordenPrecio = 'DESC' THEN (RANK() OVER (ORDER BY dbo.PRODUCTOS.precio_pro DESC))
        END



Sean felices! :) Y sientanse libres de opinar ;)

3 comentarios:

  1. Parece una consulta muy avanzada

    ResponderEliminar
  2. Si... es algo avanzada... pero digamos que es una muy buena consulta para una tienda a la hora de realizar una busqueda de productos... Saludos. Gracias por tu comentario.

    ResponderEliminar
  3. deberia de ir explicando cada paso para los novatos eso es muy complicado

    ResponderEliminar