Código [code]:
Ver originalALTER PROCEDURE [dbo].[ArticulosPedidosCliente]
@IdSuc int = 0,
@Stock int = 0
AS
SELECT DISTINCT id_articulo, nombre, codigo, stock
FROM (
SELECT DISTINCT a.id_articulo, a.nombre, ap.codigo, isnull(asu.stock,0) as stock,
ROW_NUMBER() OVER (
ORDER BY
CASE WHEN UPPER(@OrderBy) = 'PADRE' AND UPPER(@OrderSort) = 'ASC' THEN padre
END ASC,
CASE WHEN UPPER(@OrderBy) = 'PADRE' AND UPPER(@OrderSort) = 'DESC' THEN padre
END DESC,
CASE WHEN UPPER(@OrderBy) = 'RAZONSOCIAL' AND UPPER(@OrderSort) = 'ASC' THEN razonSocial
END ASC,
CASE WHEN UPPER(@OrderBy) = 'RAZONSOCIAL' AND UPPER(@OrderSort) = 'DESC' THEN razonSocial
END DESC,
CASE WHEN UPPER(@OrderBy) = 'NOMBRE' AND UPPER(@OrderSort) = 'ASC' THEN nombre
END ASC,
CASE WHEN UPPER(@OrderBy) = 'NOMBRE' AND UPPER(@OrderSort) = 'DESC' THEN nombre
END DESC
) AS RowNumber
FROM ARTICULO a JOIN ARTICULO_PROVEEDOR ap ON a.id_articulo = ap.id_articulo
JOIN LINEA l ON a.id_linea = l.id_linea
JOIN PROVEEDOR p ON ap.id_proveedor = p.id_proveedor
LEFT JOIN ARTICULO_SUCURSAL asu ON a.id_articulo = asu.id_articulo AND asu.stock >= @Stock
WHERE
asu.id_sucursal = CASE WHEN @IdSuc <> 0 THEN @IdSuc
ELSE asu.id_sucursal
END
) AS Articulo
WHERE RowNumber BETWEEN @PageSize * @PageNumber + 1
AND @PageSize * (@PageNumber + 1)
Es un store procedure para paginacion de resultados.
El tema del stock esta mas o menos solucionado, pero tengo el mismo problema con el parametro "sucursal"; porque puedo filtrar o no los articulos por sucursal, si filtro por sucursal debo poner una clausula en el WHERE, si no, no. Y con lo que tengo actualmente me obliga a poner si o si una clausula en el WHERE, con lo que rompe mi LEFT JOIN ARTICULO_SUCURSAL.
Si no se entiende algo, aca estoy para despejar dudas
Saludos