1

我查看了几篇相对的帖子,但我不知道如何将它们应用于我的情况。

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 个表activitiesbookingstempbookings。该tempbookings表还包含一个tempReservedDate包含日期时间数据类型的字段,我只需要对 tempPlaces 进行 SUM 计算,以求和那些tempReservedDate未来有的记录,过去的那些记录只是忽略(类似于我已经通过显示来控制活动只有那些具有未来日期的人)SUM 还需要按每个活动对它们进行分组。

我相信我需要在“WHERE”部分中添加类似

[LeisureActivities].[dbo].[tempbookings].[tempReservedDate] > GetDate ()

我只是不知道把它放在哪里使它工作而不将它应用于我的整个查询,因为它只需要应用于tempPlaces.

我希望我已经设法解释了我的意思,但请询问它是否没有意义,尽管我知道您通常不会像我一样格式化它(使用 [] 等),但对于程序使用这些查询必须以这种特定格式完成。

任何帮助表示赞赏,谢谢。

4

1 回答 1

1

您需要在select子句中有条件总和:

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

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

于 2013-03-21T14:39:33.343 回答