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 ;)
Parece una consulta muy avanzada
ResponderEliminarSi... 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.
ResponderEliminardeberia de ir explicando cada paso para los novatos eso es muy complicado
ResponderEliminar