我的查询下面是它返回的最后一个记录上的数量的两倍。我有3张桌子 - 活动,预订和预订。查询需要列出活动和附加信息,并通过每个活动从预订表中抽取预订位置的总数(使用SUM),然后它需要计算相同的tempbook(tempPlacesReserved),以提供该表格内的保留字段是未来的。SQL SUM函数应该使用多个表的数量翻倍
但是,第一个问题是,如果tempbook中的活动没有记录,它根本不会返回任何该活动的记录,为了解决这个问题,我在过去创建了虚拟记录,以便它仍然返回记录,但如果我能做到这一点,我不必这样做,我宁愿它!
我遇到的主要问题是,在返回结果的最终记录中,它将预订总数和保留的位置加倍,这使得整个查询无用。
我知道我做错了,我只是无法对它进行排序,我在网上搜索了类似的问题,但无法正确地将它们应用于我的情况。
任何帮助,将不胜感激。
P.S.我知道,通常你不需要完全标记数据库,表格和字段的所有路径,但对于我计划使用它的程序,我必须这样做。
代码:
SELECT [LeisureActivities].[dbo].[activities].[activityID],
[LeisureActivities].[dbo].[activities].[activityName],
[LeisureActivities].[dbo].[activities].[activityDate],
[LeisureActivities].[dbo].[activities].[activityPlaces],
[LeisureActivities].[dbo].[activities].[activityPrice],
SUM([LeisureActivities].[dbo].[bookings].[bookingPlaces]) AS 'bookingTotal',
SUM (CASE WHEN[LeisureActivities].[dbo].[tempbookings].[tempReserveDate] > GetDate() THEN [LeisureActivities].[dbo].[tempbookings].[tempPlaces] ELSE 0 end) AS 'tempPlacesReserved'
FROM [LeisureActivities].[dbo].[activities],
[LeisureActivities].[dbo].[bookings],
[LeisureActivities].[dbo].[tempbookings]
WHERE ([LeisureActivities].[dbo].[activities].[activityID]=[LeisureActivities].[dbo].[bookings].[activityID]
AND [LeisureActivities].[dbo].[activities].[activityID]=[LeisureActivities].[dbo].[tempbookings].[tempActivityID])
AND [LeisureActivities].[dbo].[activities].[activityDate] > GetDate()
GROUP BY [LeisureActivities].[dbo].[activities].[activityID],
[LeisureActivities].[dbo].[activities].[activityName],
[LeisureActivities].[dbo].[activities].[activityDate],
[LeisureActivities].[dbo].[activities].[activityPlaces],
[LeisureActivities].[dbo].[activities].[activityPrice];
TY bluefeet你太快,我 – user2195482 2013-03-21 17:46:36