Forums Últimos mensajes - Powered by IBM
 

Filtro en consulta

16/02/2005 - 21:55 por Daniel | Informe spam
Cual es la mejor manera de filtrar en una misma consulta los siguiente

si la variable es 0 traiga todos y si no que traiga solo los
correspondientes a esa variable, ejemplo

Si quiero traer las ventas de todas o de solo una sucursal por su id de
sucursal seria alo asi

lidsucursal = 3
SELECT * FROM facturas WHERE facturas = lidsucursal

el tema es como hacer para que en la misma consulta pueda traer segun el
valor de la vartiable.

Espero que se entienda mi pregunta

Un saludo
 

Leer las respuestas

#1 Alejandro Mesa
16/02/2005 - 22:11 | Informe spam
Daniel,

declare @lidsucursal int

set @lidsucursal = 3

SELECT *
FROM facturas
WHERE facturas = lidsucursal or @lidsucursal = 0

Ahora, esta no es la forma mas optima, preferible si en el procedimiento
almacenado haces una llamada a otros dos sp en base al valor de la variable.

Ejemplo:

create procedure dbo.proc1
@par1 int
as
set nocount on

declare @i int

set @i = @par1

select col1, col2, ...
from table1
where col1 = @i

return @@error
go

create procedure dbo.proc2
as
set nocount on

select col1, col2, ...
from table1

return @@error
go

create procedure dbo.proc3
@par1 int
as
set nocount on

declare @rv int

if @par1 is null
execute @rv = dbo.proc2
else
execute @rv = dbo.proc1 @par1

return coalesce(nullif(@rv, 0), @@error)
go

execute dbo.proc3 3

execute dbo.proc3 null

execute dbo.proc3 2
go

Puedes chequear los planes de ejecucion y comparar.


AMB

"Daniel" wrote:

Cual es la mejor manera de filtrar en una misma consulta los siguiente

si la variable es 0 traiga todos y si no que traiga solo los
correspondientes a esa variable, ejemplo

Si quiero traer las ventas de todas o de solo una sucursal por su id de
sucursal seria alo asi

lidsucursal = 3
SELECT * FROM facturas WHERE facturas = lidsucursal

el tema es como hacer para que en la misma consulta pueda traer segun el
valor de la vartiable.

Espero que se entienda mi pregunta

Un saludo

Preguntas similares