2016-09-30 58 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