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 的列,它们将查看所有为 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 回答