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