Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/06/2012, 09:20
Avatar de Libras
Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: Doble left outer join SQL Server

Aqui hay varias cosas, primero tus tablas no estan normalizadas, repites los nombres de los continentes y paises en las tablas de paises y ciudades, mejor usa id's para que quede normalizada, segundo pides el total de ciudades por pais, si asia tiene una ciudad que es pekin pero no tiene un pais como quieres que salga 1, a tu logica seria el numero de ciudades por continente no por pais, ya que si es por pais no tiene porque salir pekin, si es por continente si.

Código SQL:
Ver original
  1. CREATE TABLE #continente(
  2. id INT,
  3. continente VARCHAR(20)
  4. )
  5.  
  6. INSERT INTO #continente VALUES (1,'America')
  7. INSERT INTO #continente VALUES (2,'Africa')
  8. INSERT INTO #continente VALUES (3,'Asia')
  9. CREATE TABLE #pais(
  10. id INT,
  11. id_continente INT,
  12. pais VARCHAR(20)
  13. )
  14. INSERT INTO #pais VALUES (1,1,'colombia')
  15. INSERT INTO #pais VALUES (2,1,'cuba')
  16. INSERT INTO #pais VALUES (3,2,'kenia')
  17.  
  18.  
  19. CREATE TABLE #ciudad(
  20. id INT,
  21. id_continente INT,
  22. id_pais INT,
  23. nombre VARCHAR(20)
  24. )
  25.  
  26. INSERT INTO #ciudad VALUES (1,1,1,'bogota')
  27. INSERT INTO #ciudad VALUES (2,1,1,'cartagena')
  28. INSERT INTO #ciudad VALUES (3,1,2,'la habana')
  29. INSERT INTO #ciudad VALUES (3,3,NULL,'Pekin')
  30.  
  31. SELECT continente,pais, COUNT(ci.id) AS ciudades FROM #continente AS C
  32. LEFT JOIN #pais AS p ON (c.id=p.id_continente)
  33. LEFT JOIN #ciudad AS ci ON (ci.id_pais=p.id AND ci.id_continente=c.id)
  34. GROUP BY continente,pais

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me