2016-01-21 3 views
1

Я использую следующий код SQL, чтобы получить количество резервирования для каждого кватера года:Сумма до нескольких значений в 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 

Это результаты, которые я получил от этого запроса:

[

Но теперь я хочу добавить одну колонку [Total], в которой суммируются все значения всех кварталов за год. Например, год 2015 составляет 1 и 2016 год составляет 8.

Может ли кто-нибудь мне помочь?

+2

Просим использовать товар используемый dbms. (Некоторые не ANSI SQL там ...) – jarlh

+0

@jarlh Есть ли тег «not MySQL»? –

+0

@TimBiegeleisen, я не думаю, что этого достаточно ... – jarlh

ответ

1

Я вообще найти стержень запросов немного трудно читать. Все, что делает ваш запрос, - это строка результата в год (так что каждый год), а также количество кварталов и общее количество (так что есть несколько выражений count). Запрос можно легко записать как:

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

Я могу предложить вам попробовать обернуть этот запрос и выбрать год, четверти и общее количество. –

Смежные вопросы