2015-04-12 52 views
2

我正在運行下面的SQL語句,但我最後需要總計。使用SQL Server使用Group By但需要列的SQL語句總計

SELECT tblAllocation.Allocation AS TimeSlots, COUNT(*) AS [Applicant Total] 
FROM tblAllocation 
INNER JOIN tblRegistration ON tblAllocation.AllocationID = tblRegistration.AllocationID 
INNER JOIN tblcontact ON tblRegistration.ContactID = tblcontact.ContactID 
INNER JOIN tbladdress AS tbladdress_1 ON tblcontact.AddressID = tbladdress_1.AddressID 
INNER JOIN tblNadraRegistrationDates ON tblRegistration.NRegDateID = tblNadraRegistrationDates.NRegDateID 
WHERE (tblNadraRegistrationDates.[Nadra Reg Dates] = '26 April 2015') 
GROUP BY tblAllocation.Allocation; 

這給下面

TimeSlots  Applicant Total 
09:30 to 10:30 3 
10:30 to 11:30 10 
12:30 to 13:30 11 
Reservation  8 

TOTAL 32 <--- how can I get this 
+1

您可以使用'ROLLUP'。只需在查詢的最後添加'WITH ROLLUP;'即可。 – nhgrif

回答

3

使用的GROUP BY語句WITH ROLLUP選項:

SELECT 
    CASE 
     WHEN GROUPING(tblAllocation.Allocation) = 1 THEN 'Total' 
     ELSE tblAllocation.Allocation 
    END AS TimeSlots, 
    COUNT(*) AS [Applicant Total] 
FROM 
    tblAllocation 
INNER JOIN 
    tblRegistration ON tblAllocation.AllocationID = tblRegistration.AllocationID 
INNER JOIN 
    tblcontact ON tblRegistration.ContactID = tblcontact.ContactID 
INNER JOIN 
    tbladdress AS tbladdress_1 ON tblcontact.AddressID = tbladdress_1.AddressID 
INNER JOIN 
    tblNadraRegistrationDates ON tblRegistration.NRegDateID = tblNadraRegistrationDates.NRegDateID 
WHERE 
    (tblNadraRegistrationDates.[Nadra Reg Dates] = '26 April 2015') 
GROUP BY 
    tblAllocation.Allocation WITH ROLLUP; 

您可能需要使用別名表名,縮短查詢文字,並可能使其更具可讀性(但這當然只是一種意見)。

Demo SQL Fiddle

+1

使用[GROUPING](https://msdn.microsoft.com/en-us/library/ms178544.aspx)函數也可以更清楚地完成使用COALESCE所做的操作:'CASE WHEN GROUPING(tblAllocation.Allocation) = 1 THEN'總計'ELSE tblAllocation.Allocation END AS TimeSlots'。 –

+1

@TT。啊,是的,那好多了。我不會使用匯總,分組和分組集以及過於頻繁並且已經忘記的事情。感謝您的提醒。我已經改變了我的回答來反映這一點,我希望你不介意。 – jpw