2013-04-25 24 views
1

嗨,我有過程,它是工作,看起來像SQL過程,它應該顯示總

create procedure sp_CountPickupsduringYearReportA1A2 
@MyYear int 
AS 
SELECT 
MAX(a.AgencyName), 
COUNT(PickupID) as YearTotal, 
COUNT(PickupID)/(CASE WHEN YEAR(GETDATE()) [email protected] THEN MONTH(GETDATE()) ELSE 12 END) as MoAvg, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 1 THEN 1 ELSE 0 end) as Jan, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 2 THEN 1 ELSE 0 end) as Feb, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 3 THEN 1 ELSE 0 end) as Mar, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 4 THEN 1 ELSE 0 end) as Apr, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 5 THEN 1 ELSE 0 end) as May, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 6 THEN 1 ELSE 0 end) as Jun, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 7 THEN 1 ELSE 0 end) as Jul, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 8 THEN 1 ELSE 0 end) as Aug, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 9 THEN 1 ELSE 0 end) as Sep, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 10 THEN 1 ELSE 0 end) as Oct, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 11 THEN 1 ELSE 0 end) as Nov, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 12 THEN 1 ELSE 0 end) as Dec 
FROM dbo.Pickup p join Agency a on p.agencyid = a.agencyid 
where DATEPART(year, PickupDate) = @MyYear 
group by a.AgencyID 
order by a.AgencyID 

這是工作完美魯喜歡

name YearTotal MoAvg 1, 2, 3, 4, 5, 6, 7,8,9,10,11,12 
test 13  1  1 1 1 1 1 1 1 1 1 1 1 1 2 

我需要顯示總爲每列迴應外觀簡單的總結爲每列像somthing

 name YearTotal MoAvg 1, 2, 3, 4, 5, 6, 7,8,9,10,11,12 
     total 25  2 2 2 2 2 2 2 2 2 2 2 2 2 3 
     test 13  1  1 1 1 1 1 1 1 1 1 1 1 1 2 
     test 12  1  1 1 1 1 1 1 1 1 1 1 1 1 1 

任何想法如何做到這一點? 我試圖解決這個難題了幾個小時仍無法想通了

回答

2

這通常是更好的演示文稿層來處理。但是,您可以使用UNION查詢達到同樣的效果,上面的查詢相結合的使用SUM聚合子查詢。由於您使用的是SQL Server 2008,因此您也可以使用公用表表達式:

WITH CTE AS (
SELECT 
    MAX(a.AgencyName) Name, 
    COUNT(PickupID) as YearTotal, 
    COUNT(PickupID)/(CASE WHEN YEAR(GETDATE()) = YEAR(PickupDate) THEN MONTH(GETDATE()) ELSE 12 END) as MoAvg, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 1 THEN 1 ELSE 0 end) as Jan, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 2 THEN 1 ELSE 0 end) as Feb, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 3 THEN 1 ELSE 0 end) as Mar, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 4 THEN 1 ELSE 0 end) as Apr, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 5 THEN 1 ELSE 0 end) as May, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 6 THEN 1 ELSE 0 end) as Jun, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 7 THEN 1 ELSE 0 end) as Jul, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 8 THEN 1 ELSE 0 end) as Aug, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 9 THEN 1 ELSE 0 end) as Sep, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 10 THEN 1 ELSE 0 end) as Oct, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 11 THEN 1 ELSE 0 end) as Nov, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 12 THEN 1 ELSE 0 end) as Dec 
FROM dbo.Pickup p 
    JOIN Agency a ON p.agencyid = a.agencyid 
GROUP BY a.AgencyID, YEAR(PickupDate) 
) 
SELECT * FROM CTE 
UNION 
SELECT 'Total', 
    SUM(YearTotal) YearTotal, 
    SUM(MoAvg) MoAvg, 
    SUM(Jan) Jan, 
    SUM(Feb) Feb, 
    .... 
    SUM(Dec) Dec 
FROM CTE 
+0

它可行,但可能需要與Web開發人員進行交談。由於 – Andrey 2013-04-25 01:36:41

+0

@AndreyIvanov - 希望這有助於:http://sqlfiddle.com/#!3/ce45b/1最好的問候。 – sgeddes 2013-04-25 01:44:56

相關問題