Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

No Salgo Del Atasco

Estas en el tema de No Salgo Del Atasco en el foro de Bases de Datos General en Foros del Web. Buenas!! Bueno os comento mi problema...llevo 2 dias en el curro intentando hacer una query xro no me sale ni a tiros...ya me he metido ...
  #1 (permalink)  
Antiguo 14/02/2008, 11:57
 
Fecha de Ingreso: febrero-2008
Mensajes: 4
Antigüedad: 16 años, 2 meses
Puntos: 0
No Salgo Del Atasco

Buenas!! Bueno os comento mi problema...llevo 2 dias en el curro intentando hacer una query xro no me sale ni a tiros...ya me he metido en una espiral sin salida.Os explico

Tengo una busqueda para realizar unos filtros..bien hay 3 campos que pueden meterse o no que son IdPedido,IdAlbaran,IdTasa

En mi base de datos voy a tener los siguiente

Factura que va a ser nuestra tabla principal.Esta tabla tendra relacion 1..n con:

Pedido: IdFactura (FK),IdPedido (tb es clave)
Albaran:IdFactura(FK),IdAlbaran(tb es clave)
Tasa:IdFactura(FK),IdTasa(tb es clave)


El objetivo es sacar las facturas del pedido que le indico,o del albaran o de la tasa...o la combinacion de todos...es decir puedo decirle...dame las facturas con el numero de pedido 200 y el albaran 1...con lo cual tasa no iria en ese JOIN...o bien dame la factura con la tasa 2 y con numero de albaran 1...Posibles aportaciones al problema??

Gracias de antemano
  #2 (permalink)  
Antiguo 14/02/2008, 14:35
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 4 meses
Puntos: 7
Re: No Salgo Del Atasco

No sé que motor de BD estás usando, pero lo siguiente te puede ayudar:
Código:
DECLARE @IdPedido INT, @IdAlbaran INT, @IdTasa INT
SET @IdPedido = 200
SET @IdAlbaran = 1
SET @IdTasa = NULL
 
SELECT      *--Tu lista de campos
FROM        Factura AS f
INNER JOIN  Pedido AS p
          ON p.IdFactura = f.IdFactura
          AND p.IdPedido = COALESCE(@IdPedido, p.IdPedido)
INNER JOIN  Albaran AS a
          ON a.IdFactura = f.IdFactura
          AND a.IdAlbaran = COALESCE(@IdAlbaran, a.IdAlbaran)
INNER JOIN  Tasa AS t
          ON t.IdFactura = f.IdFactura
          AND t.IdTasa = COALESCE(@IdTasa, t.IdTasa) 
Lo que pases como NULL no será filtrado. Tu otra opción es SQL Dinámico.
  #3 (permalink)  
Antiguo 14/02/2008, 14:50
 
Fecha de Ingreso: febrero-2008
Mensajes: 4
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: No Salgo Del Atasco

Cita:
Iniciado por Beakdan Ver Mensaje
No sé que motor de BD estás usando, pero lo siguiente te puede ayudar:
Código:
DECLARE @IdPedido INT, @IdAlbaran INT, @IdTasa INT
SET @IdPedido = 200
SET @IdAlbaran = 1
SET @IdTasa = NULL
 
SELECT      *--Tu lista de campos
FROM        Factura AS f
INNER JOIN  Pedido AS p
          ON p.IdFactura = f.IdFactura
          AND p.IdPedido = COALESCE(@IdPedido, p.IdPedido)
INNER JOIN  Albaran AS a
          ON a.IdFactura = f.IdFactura
          AND a.IdAlbaran = COALESCE(@IdAlbaran, a.IdAlbaran)
INNER JOIN  Tasa AS t
          ON t.IdFactura = f.IdFactura
          AND t.IdTasa = COALESCE(@IdTasa, t.IdTasa) 
Lo que pases como NULL no será filtrado. Tu otra opción es SQL Dinámico.

Tengo que hacerlo en SQL puro y duro para hacer un "dataservices sql" ya que es un filter dinamico en un WebServices (cuya parte de dataservices y webservices estamos desarrollando con Bea Weblogic 8.1)...Mi duda era esa...que si yo no le meto alguno de los campos ya sea tasa,pedido o albaran me da un error.Imagino que debo controlar cuando sea nulo y meterle a fuego el NULL para que se lo trague.Con este dataservices sql debo obtener el resultado (dado por un esquema) y debo volver a filtrar por otros criterios.Probare esto que me has pasado a ver si me funciona mañana.Muchas gracias man ;).
  #4 (permalink)  
Antiguo 14/02/2008, 17:11
Avatar de bandolera_triste  
Fecha de Ingreso: noviembre-2007
Mensajes: 136
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: No Salgo Del Atasco

usa el like

como en este ejemplo
SELECT *
FROM vivienda
WHERE tipo_v LIKE "%CASA%" && operacion LIKE "%RENTA%" && disponible LIKE "%SI%" && categoria LIKE "%PLAYA%" && niveles LIKE "%1%" && precio between "500" and "5000"
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:58.