2017-07-18 43 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