2016-06-24 44 views
0

我使用Oracle Apex.I創建了一列平均設定值它的價值如何設置由聚合函數detemined到列

UPDATE emp 
SET avg = SUM(price) 
OVER (PARTITION BY id)/COUNT(DISTINCT date) OVER(PARTITION BY id); 

我一直在使用聚合函數成功地生成我想要的價值,但我無法將其設置爲Column.Suggest如何我可以將我的查詢結果設置爲列。

+0

UPDATE emp SET avg = SUM(price) OVER(PARTITIO N BY ID)/ COUNT(DISTINCT日期)OVER(PARTITION BY ID)AS價格EMP – mohan111

+0

嘗試使用dint work.I認爲我們不應該使用聚合函數來設置語句。但我不確定 –

+0

除了SUM (價格)/ COUNT(DISTINCT日期)'看起來非常可疑,您不應該存儲該值。您顯示的值可以從現有數據中獲得,因此不要創建冗餘。 (你不應該爲名稱使用SQL單詞,例如'avg'和'date'。) –

回答

0

通過讓所有的數據到CTE和基於ID更新,關於EMP表

假定腳本:

在Oracle:

MERGE INTO EMP U 
using (
SELECT ID 
       , SUM(price) OVER (PARTITION BY id)/COUNT(DISTINCT date) OVER(PARTITION BY id) AS Rnum 
     FROM EMP 
) S 
on (u.id = s.id) 
when matched then update set U.Avg = S.rnum 

在SQL Server

;WITH number AS (
     SELECT ID 
       , SUM(price) OVER (PARTITION BY id)/COUNT(DISTINCT date) OVER(PARTITION BY id) AS Avg 
     FROM EMP 

    ) 
    UPDATE t 
    SET  t.Avg = r.Avg 
    FROM Emp t 
      JOIN number r ON t.ID = r.ID; 
+0

你確定Oracle支持嗎? –