2017-07-18 40 views
1

我正在寻找生成我店效率的结果。为此,我需要来自3个不同表格JOMAST,JODRTG和INRTGS的数据。所以我想出了以下查询:带JOIN和Group By Plus的SQL平均值

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我得到一个错误,它不能使用和外栏。如果我在操作编号上执行Group By,则每个部分的所有操作10将被合并。这不是预期的结果。

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

+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 

在你的你选择列的列表中的列。

欲了解更多信息,可以谷歌PARTITION BY,但认为它像一个指令执行GROUP BY X,AVG(Y)(或总结,最大,无论)数据,但然后把该AVG进入对于其中x是目前各行的行数据..

本质上,它是一样写(SELECT jodrtg.fpartno, avg(jodrtg.fprod_tim) as avg_for_all_frod_tim FROM blah GROUP BY jodrtg.fpartno)一个较小的子查询,然后通过外部引用加入回你的主查询

+0

类别。我想要平均jomast.fpartno等于10的所有JODRTG.foperno。 JODRTG表不包含零件号码。它具有工作号码,我可以在JOMAST表格中使用该号码来获取零件号码。 inrtgs.fuprodtime是我们的默认“这是该操作需要多长时间”的时间。所以我想将它与我们实际的平均值进行比较,看看我们是否需要进行更改。我真的想要这样的东西:第1行零件号/ Colm 6“C操作编号/ 10操作备忘录/这里的东西工作中心/ 78-01 Act Prod Time/2.56 Est。Prod Time/.63 – CWilson