对于这个问题起见,我们假设该表的结构:SQL集团通过包括空行
People:
PersonID int PK
Name varchar(50)
Place int NULL FK -> Places.PlaceID
MovedIn datetime
Places:
PlaceID int PK
Name varchar(50)
我想确定有多少人生活在每一个地方:
SELECT pla.PlaceID, COUNT(*)
FROM Places AS pla
LEFT JOIN People as peo ON peo.PlaceID = pla.PlaceID
GROUP BY pla.PlaceID
这个查询将省略那里没有人居住的地方。有什么办法可以让它数0吗?
(我靶向SQL Server 2005中,在起飞的机会,它事项)
编辑: 这是我的真实(匿名)查询,试图适应史蒂夫的解决方案后:
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
(我最初的例子和这个之间的翻译是:Foo - > People,FooType - > Places,FooConfig - >第三个表格,额外的乐趣) 我可以使用Fosco的解决方案工作,但我更喜欢Steve的。
你想从'FooConfig'表中检索什么样的价值?看起来你没有做任何事情。 – 2011-06-10 19:18:26
'fc.Days',在'WHERE'子句中使用 – 2011-06-10 19:21:36
噢 - 是的 - 对不起!这是一个漫长的一天 – 2011-06-10 19:23:09