0

以下は、テーブルを作成した方法です。

CREATE TABLE #tmp
(
  [Counter] int
  ,Per date not null
  ,Cam float
  ,CamMeg float
  ,Hfx float
  ,HfxMet float
  ,TorMetric float

)

以下は、後でスクリプトでテーブルを呼び出す方法です。

SELECT 
  ((ROW_NUMBER() over(order by Per desc)-1)/@Avg)+1 as [Counter], Per, 
  Cam, 
  AVG(CamMetric) as CamMet, 
  HfxMe, 

FROM #tmp
GROUP BY [counter] ;

DROP TABLE #tmp

以下は私が得るエラーです:

メッセージ 8120、レベル 16、状態 1、行 175 列 '#tmp.Per' は、集計関数にも GROUP BY 句にも含まれていないため、選択リストでは無効です。

メッセージ 8120、レベル 16、状態 1、行 175 列 '#tmp.Per' は、集計関数にも GROUP BY 句にも含まれていないため、選択リストでは無効です。

私は間違って何をしていますか?

データは次のようになります

counter --- per ---Cam --- HfxMet ---......

 1        2012-02-09      3       16
 1        2012-02-24      4       12
 1        2012-03-04      2       15
 2        2012-03-15      1       18
 2        2012-03-30      6       20
 2        2012-04-07      10      6
 3        2012-04-28      8       3

ここで、CamMetricAvg と HfxMetric という名前の 2 つの列をさらに追加します。これらの列は、1 であるすべてのカウンターを調べてから、CamMetric と HfxMetric の値をそれぞれ取得し、平均を算出してそれぞれに配置します。次のようにします。

counter --- per ---Cam --- CamMt ---

 1        2012-02-09      3         3                
 1        2012-02-24      4         3                
 1        2012-03-04      2         3              
 2        2012-03-15      1         5.6             
 2        2012-03-30      6         5.6             
 2        2012-04-07      10        5.6              
 3        2012-04-28      8         8              

4

1 に答える 1

1
SELECT [Counter], Period,
  CamMetric, 
  AvgCamMetric = AVG(CamMetric) OVER(PARTITION BY Counter),
  HfxMetric, 
  AvgHfxMetric = AVG(HfxMetric) OVER(PARTITION BY Counter)
  ... repeat for other metrics ...
FROM #tmpTransHrsData
GROUP BY [Counter], Period, CamMetric, HfxMetric;

SQLFiddle の例

于 2013-03-20T22:19:53.077 に答える