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

Consulta - MSSQL

Estas en el tema de Consulta - MSSQL en el foro de Bases de Datos General en Foros del Web. Buenas, estoy algo mareado y no encuentro la vuelta a esta consulta Trabajo con MSSQL Tengo una tabla X que tiene los campos: Fecha, IdAccion ...
  #1 (permalink)  
Antiguo 08/10/2003, 11:08
Avatar de Viet  
Fecha de Ingreso: octubre-2003
Ubicación: Mar del Plata - Argentina
Mensajes: 247
Antigüedad: 20 años, 7 meses
Puntos: 2
Pregunta Consulta - MSSQL

Buenas, estoy algo mareado y no encuentro la vuelta a esta consulta

Trabajo con MSSQL

Tengo una tabla X que tiene los campos: Fecha, IdAccion ....

Y otra tabla Y donde tengo : Permitido(bit) , IdAccion.....

Lo que tengo que obtener son todos los registros de la tabla X que correspondan al dia de hoy, SI no existe otro reg del dia de hoy donde Permitido(haciendo un Inner join con Tabla Y) sea 0.

Lo primero es facil

Select *
From TablaX
Where
(datepart(dy,fecha)=datepart(dy,getdate()))


Pero no encuentro la forma de ver que no exista otro registro sin permiso para el mismo dia.

Alguna idea????

Muchas Gracias por su tiempo. ;)
__________________
Keep it simple and keep it fast.
  #2 (permalink)  
Antiguo 08/10/2003, 11:21
Avatar de Viet  
Fecha de Ingreso: octubre-2003
Ubicación: Mar del Plata - Argentina
Mensajes: 247
Antigüedad: 20 años, 7 meses
Puntos: 2
Lo unico que se me ocurre es una subconsulta en el Where con :

Código:
  Select * 
 From TablaX
 Where 
     (datepart(dy,fecha)=datepart(dy,getdate()))  and 
      
      Id not in(select * from tablaX x inner join tablaY y on(x.IdAccion=y.IdAccion) where y.Permitido=0  and (clausela de fecha) )
Pero la verdad me parece bastante ineficiente y cargado para el DBMS

Algo mas simple?
__________________
Keep it simple and keep it fast.
  #3 (permalink)  
Antiguo 09/10/2003, 01:55
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años
Puntos: 0
No sé si será efectivo, pero ahora mismo no se me ocurre otra solució que no sea utilizar una subconsulta, mas o menos así

Select *
From TablaX
Where
(datepart(dy,fecha)=datepart(dy,getdate())) AND idAccion IN
(SELECT x.idAccion
FROM tablaX x inner join tablaY y on(x.IdAccion=y.IdAccion)
WHERE y.Permitido=0 and (clausela de fecha)
GROUP BY x.idAccion
HAVING Count(1) = 1))

es un poco mezcla de las dos pero me parece que esto te dará los resutados que quieres

Un saludo
  #4 (permalink)  
Antiguo 09/10/2003, 06:19
Avatar de Viet  
Fecha de Ingreso: octubre-2003
Ubicación: Mar del Plata - Argentina
Mensajes: 247
Antigüedad: 20 años, 7 meses
Puntos: 2
Hola Teri, muchas gracias por tu ayuda, pero no termino de comprender cual es la funcion de HAVING ?
__________________
Keep it simple and keep it fast.
  #5 (permalink)  
Antiguo 09/10/2003, 06:29
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años
Puntos: 0
Con el HAVING sacará aquellos que estén sólo una vez
  #6 (permalink)  
Antiguo 09/10/2003, 06:35
Avatar de Viet  
Fecha de Ingreso: octubre-2003
Ubicación: Mar del Plata - Argentina
Mensajes: 247
Antigüedad: 20 años, 7 meses
Puntos: 2
Ja, pequeña omición la mia, Me olvide de comentar que X.IdAccion es FK de y.IdAccion que es PK.... por lo que siempre voy a tener un solo reg en Y.... pero varios en X.....


Gracias de todos modos
__________________
Keep it simple and keep it fast.
  #7 (permalink)  
Antiguo 09/10/2003, 06:37
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años
Puntos: 0
Pues justo eso, sacará aquellos que coincidiento en las fechas marcadas, en X, si en Y hay más de uno, no lo saque, no es eso lo que querías???
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 21:38.