2013-03-21 77 views
1

我查看了幾個相對的帖子,但我無法弄清楚如何將它們應用於我的情況。使用多個表和使用幾個SUM函數的SQL

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數據類型,我需要SUM計算tempPlaces僅用於SUM那些將來有tempReservedDate的記錄,過去那些只是忽略的記錄(類似於我已經在控制活動通過僅顯示具有未來日期的活動)SUM還需要將這些活動分組。

我相信我需要把我的「WHERE」部分類似

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

我只是不知道在哪裏把它,使其不將其應用於我的整個查詢,因爲它只需要工作申請到tempPlaces

我希望我已經設法解釋我的意思,但請問是否沒有意義,雖然我知道你經常不會格式化它(我喜歡[]等),但對於使用這些查詢的程序,必須以這種特殊格式完成。

任何幫助表示讚賞,謝謝。

回答

1

您需要select子句中條件的總和:

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

此外,你應該學會如何更好地格式化你的代碼,並使用合理的別名(如tbtempBookings)。

+0

感謝您的回覆 - 這是一個好的開始,但是如果當前在該特定活動的tempbook表中沒有關於actvitiy的記錄,則活動記錄根本不會顯示。該查詢應該返回3個不同的活動,然後僅顯示其中一個活動的「FutureTempPlaces」,因爲這是目前唯一有一個活動記錄記錄的活動 - 對於之前未提及的內容而抱歉。 – user2195482 2013-03-21 15:01:26