2017-12-26 2 views
0

Meine Situation ist, dass ich eine Tabelle haben, dass, wenn vereinfacht, sieht wie folgt aus:MS-Access den größten Wert kleiner als aktuelle Wert Kriterien wählen

Sort| IsHeader 
1 | 0 
2 | 0 
3 | 1 
4 | 0 
5 | 0 
6 | 1 
7 | 0 
8 | 0 
9 | 0 

Ich versuche, eine Abfrage zu machen, die ein Update neue HeaderSort Linie für jede Detailzeile zu zeigen, welche header dieser Linie gehört mit diesem Endergebnis,:

Sort| IsHeader| HeaderSort 
1 | 0  | 0 
2 | 0  | 0 
3 | 1  | 3 
4 | 0  | 3 
5 | 0  | 3 
6 | 1  | 6 
7 | 0  | 6 
8 | 0  | 6 
9 | 0  | 6 

In T-SQL kann ich es ganz einfach tun:

update MT set HeaderSort = 
(
    select isnull(max(Sort),0) from MyTable where Sort <= MT.Sort and IsHeader = 1 
) as HeaderSort 
from MyTable MT 

an einem Zugangs Version Mein Versuch ist wie folgt: „Der Betrieb eine aktualisierbare Abfrage verwenden müssen“

Update MyTable set HeaderSort = 
(
    select nz(max(Sort),0) from MyTable where Sort <= MT.Sort and IsHeader = 1 
) 

Dies ergibt jedoch ein Error. Ist mein Fehler in der Logik zum Abrufen der Werte oder nur einige ms-Zugriffssyntax?

Antwort

1

Die Operation muss eine aktualisierbare Abfrage verwenden. ist ein allgemeiner Fehler, der auftritt, wenn nicht alle Tabellen, auf die in einer Aktualisierungsanweisung verwiesen wird, aktualisierbar sind. Leider sind Unterabfragen selten.

Sie können durch die Verwendung eines DLookup anstelle einer Unterabfrage den Fehler umgehen:

Update MyTable set HeaderSort = DLookUp("nz(max(Sort),0)", "MyTable", "Sort <= " & MyTable.Sort & " and IsHeader = 1") 
+1

Das ist nicht wahr. 'DLookUp' ist kein echtes Domain-Aggregat, sondern ein Recordset-Wrapper, der das erste Ergebnis zurückgibt, soweit ich weiß. Sie können Aggregate und Ausdrücke in 'DLookUp' verwenden. 'DLookUp (" Max (Feld1) "," MyTable ")' ist nur ein weniger optimiertes gleich 'DMax (" Field1 "," MyTable ")' –

+0

Ich denke, ich dachte entlang der Linie, es vollständig in einem SQL zu haben Aussage, aber für meine Zwecke funktioniert die DLookup-Methode gut. – Quark

Verwandte Themen