SQL使用多个表并使用多个SUM函数

时间:2013-03-21 14:33:35

标签: sql sum

我查看了几篇相对的帖子,但我无法弄清楚如何将它们应用到我的情况中。

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([LeisureActivities].[dbo].[tempbookings].[tempPlaces]) 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];

如您所见,这指的是3个表,activitiesbookingstempbookingstempbookings表还包含一个tempReservedDate字段,其中包含datetime数据类型,我需要对tempPlaces进行SUM计算,以便对将来有tempReservedDate的那些记录进行SUM,以及那些过去的记录只是忽略(类似于我已经通过仅显示具有未来日期的那些来控制活动),SUM还需要通过每个活动对这些活动进行分组。

我相信我需要把我的“WHERE”部分放在像

这样的部分
[LeisureActivities].[dbo].[tempbookings].[tempReservedDate] > GetDate ()

我只是不知道在不将其应用于我的整个查询的情况下将其放在哪里使用,因为它只需要应用于tempPlaces

我希望我已经设法解释我的意思,但请问是否没有意义,虽然我知道你经常不会格式化我的方式(使用[]等)但是使用这些查询的程序必须以这种特定格式完成。

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

您需要select子句中的条件求和:

SUM(case when [tempbookings].[tempReservedDate] > GetDate()
                then tempBookings.tempPlaces
           end) as FutureTempPlaces

此外,您应该学习如何更好地格式化代码并使用合理的别名(例如tb的{​​{1}})。