2016-09-30 8 views
0

Допустим, у меня есть индексный вид, что bucketing количества дней пребывания людей в гостинице в данном месяце. При создании отчета я хочу вставить строку в мой результирующий набор, который показывает среднее число дней для всех месяцев.SQL Среднего значением отсчета подмножества

Мой индексированный вид выглядит следующим образом:

NumMonth | NumPeople | NumDays 
1  | 4   | 3 
1  | 4   | 4 
2  | 1   | 9 
3  | 3   | 6 
3  | 2   | 10 

Как выбрать среднюю продолжительность пребывания в одной строке?

Мой текущий запрос выглядит следующим образом:

INSERT INTO @results(month1, month2, month3, quarter1) 
SELECT 
    'month1' = ISNULL(CASE WHEN v.NumMonth = 1 
     THEN convert(decimal(10,3), sum(v.NumPeople * v.NumDays))/convert(decimal(10,3), sum(v.NumPeople)) 
     ELSE null END, 0), 
    'month2' = ISNULL(CASE WHEN v.NumMonth = 2 
     THEN convert(decimal(10,3), sum(v.NumPeople * v.NumDays))/convert(decimal(10,3), sum(v.NumPeople)) 
     ELSE null END, 0), 
    'month3' = ISNULL(CASE WHEN v.NumMonth = 3 
     THEN convert(decimal(10,3), sum(v.NumPeople * v.NumDays))/convert(decimal(10,3), sum(v.NumPeople)) 
     ELSE null END, 0), 
    'quarter1' = ISNULL(CASE WHEN v.NumMonth = 1 OR v.NumMonth = 2 OR v.NumMonth = 3 
     THEN convert(decimal(10,3), sum(v.NumPeople * v.NumDays))/convert(decimal(10,3), sum(v.NumPeople)) 
     ELSE null END, 0) 
FROM MonthTotalsView v with(noexpand) 

Я получаю сообщение об ошибке, что список выбора является недействительным, потому что мой NumMonth не агрегируются или сгруппированы. Но я хочу все это в одной строке, а не в месяц. Любая помощь будет принята с благодарностью.

Результаты Я ищу являются следующие:

month1 | month2 | month3 | quarter1 
2.5 | 9  | 7.6 | 5.357 
+0

Изменить свой вопрос и предоставить результаты, которые вы хотите. –

+0

Какая СУБД вы используете? –

+0

Я использую SSMS 2016 – adam

ответ

0

Как выбрать среднюю продолжительность пребывания в одной строке?

Если предположить, что данные представляет собой одну строку за весь период проживания:

select avg(numdays) 
from MonthTotalsView; 

Если вы хотите этот месяц:

select nummonth, avg(numdays) 
from MonthTotalsView 
group by nummonth; 
+0

Я обновил свой вопрос, чтобы показать, что я ищу. Спасибо. – adam