2016-09-30 10 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が集約またはグループ化されていないため、選択リストが無効であるというエラーを取得しています:

私の現在のクエリは次のようになります。しかし、私は月に分割されていない、1つの行にすべてが必要です。どんな助けでも大歓迎です。私が探している

結果は次のとおりです。

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

編集をあなたの質問、あなたが望む結果を提供します。 –

+0

どのDBMSを使用していますか? –

+0

私はSSMSを使用しています2016 – adam

答えて

0

私は、単一の行で滞在の平均の長さを選択することができますどのように?

あなたのデータは滞在につき1行を表すと仮定すると:あなたは月額この場合

select avg(numdays) 
from MonthTotalsView; 

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

私が探しているものを表示するために私の質問を更新しました。ありがとうございました。 – adam