2012-11-15 14 views
5

Ich habe zwei Access-Tabellen. Eine Tabelle (Tabelle1) hat ein eindeutiges Feld, MyID und eine andere Tabelle (Tabelle2) hat mehrere Zeilen mit MyID und eine andere Spalte, Data. Ich möchte eine SQL-Anweisung schreiben, die einer foreach ähnlich ist, wo alle Werte für MyID ausgewählt und aus table2-Daten gemittelt und dann in der MyID-Zeile unter einem anderen Feld, Avg.SQL foreach mit Tabellenzeilen

**Table1** 
MyID 
ID1 
ID2 
ID3 

**Table2** 
MyID Data Mon 
ID2 10  Jan 
ID2 20  Feb 
ID1 10  Jan 
ID3 30  Mar 
ID1 30  Mar 

Erwartet Ergebnisse wie:

**Table1** 
MyID Avg 
ID1  20 
ID2  15 
ID3  30 

Vielleicht gibt es einen besseren Weg, dies in SQL zu tun, aber derzeit nicht wissen.

Antwort

5
UPDATE table1 
     INNER JOIN 
     (
      SELECT Data1, AVG(columnName) avgCol 
      FROM table2 
      GROUP BY Data1 
     ) b ON table1.MyID = b.Data 
SET  table1.avgColumnName = b.avgCol 
+0

Ich bekomme die Fehlermeldung: Die MS Office Access db-Engine kann das Objekt 'AVG (Data) avgCol' nicht finden. –

0

Dies funktioniert der Trick in MS Access als Abfrage aber nicht in eine Tabelle zu aktualisieren.

SELECT Table2.[MyID], Avg(Table2.[Data]) AS [AVG] 
FROM Table2 
GROUP BY Table2.[MyID]