SQL with JOIN和Group By Plus Average

时间:2017-07-18 16:56:51

标签: sql-server sql-server-2008

我希望能够提高我的店铺效率。为此,我需要来自3个不同表JOMAST,JODRTG和INRTGS的数据。所以我提出了以下查询:

select jomast.fpartno AS 'Part Number',
JODRTG.foperno AS 'OP Number',
JODRTG.fopermemo As ' Description',
JODRTG.fpro_id AS 'Work Center',
jodrtg.fprod_tim AS ' Act. Production Time',
inrtgs.fuprodtime AS 'Est. Prodution Time'
from jodrtg
Left join jomast on jodrtg.fjobno = jomast.fjobno
left join inrtgs on jomast.fpartno = inrtgs.fpartno

现在我需要做的是平均法案。生产时间。并使用该部分的所有OP编号将其记录到零件编号。

当我尝试Group By JOMAST.fpartno时,我收到一个无法使用的错误和外部列。如果我在操作编号上执行分组操作,则将合并每个部件的所有操作10。这不是理想的结果。

有人可以指出我需要去实现我的结果吗?

1 个答案:

答案 0 :(得分:0)

听起来您希望多行显示相同的jodrtg.fpartno,所有显示的都是jodrtg.fprod_tim,但都显示jodrtg.fprod_tim的平均值(相同)是吗?

如果是,请添加:

AVG(jodrtg.fprod_tim) OVER(PARTITION BY jodrtg.fpartno) as avg_for_all_fprod_tim

作为您要选择的列列表中的列。

有关详细信息,您可以使用google PARTITION BY,但可以将其视为对数据执行GROUP BY x,AVG(y)(或sum,max等)的指令,但随后将该AVG放入行中x存在的每一行的数据..

基本上它与编写(SELECT jodrtg.fpartno, avg(jodrtg.fprod_tim) as avg_for_all_frod_tim FROM blah GROUP BY jodrtg.fpartno)的较小子查询然后将其连接回主查询相同