2016-01-21 65 views
1

我使用下面的SQL代码来获取预订的计数一年的每四:总结一下多个值

SELECT 
    Year, 
    ISNULL(QPivot.[1],0) As [Quater 1], 
    ISNULL(QPivot.[2],0) As [Quater 2], 
    ISNULL(QPivot.[3],0) As [Quater 3], 
    ISNULL(QPivot.[4],0) As [Quater 4] 
FROM 
    (SELECT 
     YEAR(checkInDate) [Year], 
     DATEPART(QUARTER, checkInDate) [Quarter], 
     COUNT(1) [Reservation Count] 
    FROM 
     ReservationRoom 
    GROUP BY 
     YEAR(checkInDate), DATEPART(QUARTER, checkInDate)) AS QuarterlyData 
PIVOT(SUM([Reservation Count]) 
FOR QUARTER IN ([1],[2],[3],[4])) AS QPivot 

这是我从查询得到的结果:

[my result

但是现在我想在一列中添加[Total],它总结了所有季度的所有值。例如,2015年是1,2016年是8.

任何人都可以帮助我吗?

+2

请标记使用的dbms产品。 (有些非ANSI SQL ......) – jarlh

+0

@jarlh有没有“不是MySQL”的标签? –

+0

@TimBiegeleisen,在这种情况下,我认为这不够... – jarlh

回答

1

我一般找到支点查询有点难以阅读。所有你的查询所做的每年都有一个结果行(所以按年分组),并计算季度和总数(所以有一些计数表达式)。查询可以很容易地写成:

select 
    year(checkindate) as year, 
    count(case when datepart(quarter, checkindate) = 1 then 1 end) as q1, 
    count(case when datepart(quarter, checkindate) = 2 then 1 end) as q2, 
    count(case when datepart(quarter, checkindate) = 3 then 1 end) as q3, 
    count(case when datepart(quarter, checkindate) = 4 then 1 end) as q4, 
    count(*) as total 
from reservationroom 
group by year(checkindate) 
order by year(checkindate); 
1

尝试添加四个季度在一起:

SELECT t.Year, t.[Quarter 1], t.[Quarter 2], t.[Quarter 3], t.[Quarter 4], 
    (t.[Quarter 1] + t.[Quarter 2] + t.[Quarter 3] + t.[Quarter 4]) AS Total 
FROM 
(
    SELECT Year, ISNULL(QPivot.[1],0) As [Quater 1], ISNULL(QPivot.[2],0) As [Quater 2], 
     ISNULL(QPivot.[3],0) As [Quater 3], ISNULL(QPivot.[4],0) As [Quater 4], 
    FROM 
    (
     SELECT YEAR(checkInDate) [Year], DATEPART(QUARTER, checkInDate) [Quarter], COUNT(1) [Reservation Count] 
     FROM ReservationRoom 
     GROUP BY YEAR(checkInDate), DATEPART(QUARTER,checkInDate)) AS QuarterlyData 
     PIVOT(SUM([Reservation Count]) 
     FOR QUARTER IN ([1],[2],[3],[4]) 
    ) AS QPivot 
) t 
+1

感谢您的帮助..但是我得到这个'QPivot.Year'在选择列表中是无效的,因为它不包含在聚合函数中或GROUP BY子句。 – Xion

+0

我可以建议你尝试包装这个查询并选择年份,季度和总数。 –