2016-06-24 11 views
0

Ich benutze Oracle Apex.I eine Spalte avg erstellt, um es, wie der Wert von Aggregatfunktion auf eine Säule detemined setzen

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

I erzeugt haben erfolgreich den Wert Wert gesetzt i mit Aggregatfunktion gesucht, aber ich bin nicht in der Lage, es auf eine Column.Suggest wie kann ich das Ergebnis meiner Abfrage auf Spalte setzen.

+0

UPDATE emp SET avg = SUM (Preis) OVER (PARTITIO N BY ID)/COUNT (DISTINCT Datum) OVER (PARTITION VON ID) AS Preis von EMP – mohan111

+0

versuchte es dint work.Ich denke, wir sollten Aggregatfunktionen nicht verwenden, um Aussage zu setzen. Ich bin mir aber nicht sicher –

+0

Abgesehen von 'SUMME (Preis)/COUNT (DISTINCT date) 'Sieht sehr verdächtig aus, du solltest diesen Wert trotzdem nicht speichern. Sie zeigen an, dass der Wert aus vorhandenen Daten abgerufen werden kann, erstellen Sie also keine Redundanz. (Und Sie sollten keine SQL-Wörter für Namen verwenden, wie "avg" und "date".) –

Antwort

0

Durch alle Ihre Daten in CTE bekommen und dass eine Aktualisierung auf Emp Tabelle basierend auf ID

Angenommene Script:

IN 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 

in 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

Sind Sie sicher, dass Oracle das unterstützt? –