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

Consulta ¿right join? o ¿qué?

Estas en el tema de Consulta ¿right join? o ¿qué? en el foro de SQL Server en Foros del Web. Hola, tengo una tabla de tareas del dia. Para cada dia, quiero obtener una lista de objetos sobre los que hay que hacer tareas, y ...
  #1 (permalink)  
Antiguo 29/03/2007, 09:19
Avatar de PosProdukcion  
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 19 años, 5 meses
Puntos: 9
Consulta ¿right join? o ¿qué?

Hola, tengo una tabla de tareas del dia. Para cada dia, quiero obtener una lista de objetos sobre los que hay que hacer tareas, y para cada dia quiero el conjunto maximo de objetos que hay que hacer ese dia, acompañado del conjunto total de tareas del dia, con un SI/NO o 0/1 que indique si existe o no el registro. A ver si se entiende con el ejemplo:

Cita:

DIA TAREA OBJETO
----------------------------------
D1 1 100
D1 1 200
D1 1 300
D1 2 200
D1 2 300
D2 1 800
D2 1 900
D2 3 900
Debe salir:

Cita:

DIA TAREA OBJETO HACER?
-----------------------------
D1 1 100 SI
D1 1 200 SI
D1 1 300 SI
D1 2 100 NO
D1 2 200 SI
D1 2 300 SI

D2 1 800 SI
D2 1 900 SI
D2 3 800 NO
D2 3 900 SI
O sea, me sale un registro para cada tarea y elementos de un dia, aunque el par pudiera no existir en realidad...

¿Se puede hacer con una única consulta?

Gracias
  #2 (permalink)  
Antiguo 02/04/2007, 14:51
 
Fecha de Ingreso: junio-2006
Mensajes: 109
Antigüedad: 17 años, 10 meses
Puntos: 2
Re: Consulta ¿right join? o ¿qué?

Seria algo así:

Código:
SET NOCOUNT ON
declare @tabla table(
	Dia varchar(2)
	,Tarea int
	,Objeto int
)

Declare @tablaTarea table(
	Tarea int
	,Descripcion varchar(10)
)

Declare @tablaObjeto table(Objeto int, Descripcion varchar(10))

insert into @tabla (Dia, Tarea, Objeto)
VALUES('D1',1,100)

insert into @tabla (Dia, Tarea, Objeto)
VALUES('D1',1,200)

insert into @tabla (Dia, Tarea, Objeto)
VALUES('D1',1,300)

insert into @tabla (Dia, Tarea, Objeto)
VALUES('D1',2,200)

insert into @tabla (Dia, Tarea, Objeto)
VALUES('D1',2,300)

insert into @tabla (Dia, Tarea, Objeto)
VALUES('D2',1,800)

insert into @tabla (Dia, Tarea, Objeto)
VALUES('D2',1,900)

insert into @tabla (Dia, Tarea, Objeto)
VALUES('D2',3,900)

insert into @tablaTarea (Tarea, Descripcion)
Values(1,'Tarea1')
insert into @tablaTarea (Tarea, Descripcion)
Values(2,'Tarea2')
insert into @tablaTarea (Tarea, Descripcion)
Values(3,'Tarea3')


INSERT INTO @tablaObjeto(Objeto,Descripcion)
VALUES(100,'Objeto100')
INSERT INTO @tablaObjeto(Objeto,Descripcion)
VALUES(200,'Objeto200')
INSERT INTO @tablaObjeto(Objeto,Descripcion)
VALUES(300,'Objeto300')
INSERT INTO @tablaObjeto(Objeto,Descripcion)
VALUES(400,'Objeto400')
INSERT INTO @tablaObjeto(Objeto,Descripcion)
VALUES(500,'Objeto500')
INSERT INTO @tablaObjeto(Objeto,Descripcion)
VALUES(600,'Objeto600')
INSERT INTO @tablaObjeto(Objeto,Descripcion)
VALUES(700,'Objeto700')
INSERT INTO @tablaObjeto(Objeto,Descripcion)
VALUES(800,'Objeto800')
INSERT INTO @tablaObjeto(Objeto,Descripcion)
VALUES(900,'Objeto900')

Select DISTINCT A.Dia, A.Tarea, B.Objeto, CASE WHEN C.Objeto IS NULL THEN 'NO' ELSE 'SI' END [HACER?] 
from (SELECT DISTINCT A.Dia, B.Tarea FROM @tabla A,@tablaTarea B) A
LEFT OUTER JOIN (SELECT DISTINCT A.Dia, B.Objeto FROM @tabla A, @tablaObjeto B) B ON A.Dia = B.Dia
LEFT OUTER JOIN @tabla C ON C.Dia = A.Dia AND B.Objeto = C.Objeto AND C.Tarea = A.Tarea
INNER JOIN @tabla D ON D.Objeto = B.Objeto
ORDER BY A.Dia,  A.Tarea 

Select DISTINCT A.Dia, A.Tarea, B.Objeto, CASE WHEN C.Objeto IS NULL THEN 'NO' ELSE 'SI' END [HACER?] 
from (SELECT DISTINCT A.Dia, B.Tarea FROM @tabla A,@tablaTarea B) A
LEFT OUTER JOIN (SELECT DISTINCT A.Dia, B.Objeto FROM @tabla A, @tablaObjeto B) B ON A.Dia = B.Dia
LEFT OUTER JOIN @tabla C ON C.Dia = A.Dia AND B.Objeto = C.Objeto AND C.Tarea = A.Tarea
ORDER BY A.Dia,  A.Tarea 

SET NOCOUNT OFF
Solo que el resultado que dices que debe de salir no se como sería posible obtener tendrias que explicar más de donde sale...

Suerte
  #3 (permalink)  
Antiguo 11/04/2007, 07:16
Avatar de PosProdukcion  
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 19 años, 5 meses
Puntos: 9
Re: Consulta ¿right join? o ¿qué?

Bueno, es algo similar a eso, en realidad 800 y 900 no deberían aparecer para la tarea 1 y el 100 tampoco para 2, ya que en ningun dia estan asignados, pero con esto ya me apaño

Muchas gracias por la idea
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 03:42.