2016-09-30 2 views
0

주어진 달에 호텔에 숙박하는 일수를 버텍스 뷰하는 인덱싱 된 뷰가 있다고 가정 해 봅니다. 보고서를 만들 때 모든 결과의 평균 일 수를 나타내는 결과 집합에 행을 삽입하려고합니다.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

어떤 DBMS를 사용하고 있습니까? –

+0

SSMS를 사용하고 있습니다. 2016 – adam

답변

0

이 어떻게 한 줄에 체류의 평균 길이를 선택할 수 있습니다 내가 찾고

결과는 다음과 같습니다?

select avg(numdays) 
from MonthTotalsView; 

당신이 한달이 원하는 경우 : 데이터를 가정

은 숙박 당 한 행 나타냅니다

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

제가 찾고있는 것을 보여주기 위해 제 질문을 업데이트했습니다. 고맙습니다. – adam