En aras de esta pregunta, supongamos que esta estructura de la tabla:Grupo de SQL Al incluir las filas vacías
People:
PersonID int PK
Name varchar(50)
Place int NULL FK -> Places.PlaceID
MovedIn datetime
Places:
PlaceID int PK
Name varchar(50)
quiero para determinar cuántas personas viven en cada lugar:
SELECT pla.PlaceID, COUNT(*)
FROM Places AS pla
LEFT JOIN People as peo ON peo.PlaceID = pla.PlaceID
GROUP BY pla.PlaceID
Esta consulta omitirá lugares que no tengan personas viviendo allí. ¿Hay alguna manera de hacer que cuente 0 en su lugar?
(estoy que apuntan a SQL Server 2005, en la remota posibilidad de que importe)
EDIT: Aquí está mi verdadera (anónima) de consulta, después de tratar de adaptar la solución de Steve:
SELECT
ft.FooTypeID, COUNT(f.FooID)
FROM FooType as ft
LEFT OUTER JOIN Foo f ON ft.FooTypeID = f.FooTypeID
LEFT JOIN FooConfig fc ON ft.NotificationConfigID = fc.FooConfigID
WHERE
DateDiff(day, GetDate(), f.Date) > 0 AND
DateDiff(day, GetDate(), f.Date) < fc.Days
GROUP BY ft.FooTypeID
(La traducción entre mi ejemplo inicial y este es: Foo -> Personas, FooType -> Lugares, FooConfig -> Una tercera mesa, para mayor diversión) Puedo hacer que esto funcione con la solución de Fosco, pero preferiría la de Steve.
¿Qué valor que desea recuperar de la tabla 'FooConfig'? Parece que no estás haciendo nada con eso. –
'fc.Days', utilizado en la cláusula' WHERE' –
¡Oh, sí, lo siento! Ha sido un día largo –