SQL - Join de tres tablas

   
Vista:

Join de tres tablas

Publicado por Ramón (1 intervención) el 22/12/2015 17:33:26
Hola,

Me estoy liando y tras googlear mucho creo que ya no veo lo evidente.

Tengo tres tablas:
Registros: Almacena el operador que se conecta y fecha en la que lo hace
Operadores: Almacena los operadores y el ID del centro al que pertenecen
Centros: Almacena el ID del centro y algunos datos más (entre ellos el nombre completo)

Quiero generar un listado que me devuelva lo siguiente:
Para cada fecha, la lista completa de centros(nombre completo, no solo el ID) y el número de operadores de ese centro que se han conectado. Todos los días algún operador se conecta, por lo que todos los dias hay datos en la tabla registros, pero no todos los centros se conectan todos los días por lo que habrá filas que tengan null en el número de operadores.

El resultado final queda algo así como:

Fecha - Nombre_Centro - Num_Operadores
2015-12-22 - Madrid - 4
2015-12-22 - Barcelona - 5
2015-12-22 - Sevilla - null
2015-12-22 - Valencia - null
2015-12-21 - Madrid - 7
2015-12-21 - Barcelona - 10
2015-12-21 - Sevilla - 3
2015-12-21 - Valencia - null

Las tablas tendrían el siguiente formato

Registros:
-Fecha
-Usuario

Operadores
-Usuario
-ID_Centro

Centros
-ID_Centro
-Nombre_Centro

He conseguido llegar hasta tener el listado de las fechas, con los centros que se han conectado en cada fecha, y con el número de operadores conectados en cada centro en esa fecha, pero lo que no consigo es que me salga el listado completo con valores null/vacio para los que no se han conectado.

No pongo las querys porque seguro que empezando de cero se ve fácil la solución, el problema es que yo me he embuclado y ya no parto de cero!

Si alguien me puede dar un empujón se lo agradecería mucho!

Saludos y muchas gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Join de tres tablas

Publicado por Marcelo (1 intervención) el 08/01/2016 14:10:59
La consulta me quedo algo engorrosa pero capaz te sirve(Esta hecho con SQLServer)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Select R.Fecha, C.Nombre_Centro, C.Id_Centro, Count(*) Num_Operadres
INTO ##CiudadesConectadas
from Registros R join Operadores S on R.Usuario = S.usuario
join Centros C on S.Id_Centro = C.Id_Centro
Group By R.Fecha, C.Nombre_Centro, C.Id_Centro
 
Select Fecha, Nombre_Centro, Num_Operadres
From ##CiudadesConectadas
 
union
 
Select A.Fecha, B.Nombre_Centro, Null Num_Operadres
From(
	Select distinct Fecha
	from ##CiudadesConectadas) A,
	(Select *
	From Centros C
	Where not exists (	Select *
						From ##CiudadesConectadas E
						where E.Id_Centro = C.Id_Centro)
	) B

Por cualquier duda a las ordenes
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar