2017-12-26 14 views
0

私の状況は私が簡略化されていることの表を持っているということである電流値の一致基準よりも低い最大値を選択し、次のようになります。MS-Accessの

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

私は更新されますクエリを作成しようとしています

私は非常に簡単にそれを行うことができますT-SQLで
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 

update MT set HeaderSort = 
(
    select isnull(max(Sort),0) from MyTable where Sort <= MT.Sort and IsHeader = 1 
) as HeaderSort 
from MyTable MT 
この最終結果とその行が属するヘッダーどの示すために、各明細行のための新しいHeaderSortライン、

次のようにアクセス版での私の試みは次のとおりです。

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

これは、しかし「操作は、更新可能なクエリを使用しなければなりません。」を与えますエラー。 値を取得するロジックにエラーがありますか、または一部のmsアクセス構文ですか?

答えて

1

操作では、更新可能なクエリを使用する必要があります。は、更新ステートメントで参照されているすべてのテーブルが更新可能でない場合に発生する一般的なエラーです。残念なことに、サブクエリはめったにありません。

あなたはDLookupの代わりに、サブクエリ使用してエラーを回避することができます。

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

真実ではありません。 'DLookUp'は真のドメイン集約ではなく、わかっている限り、最初の結果を返すレコードセットラッパーです。 'DLookUp'で集約と式を使うことができます。 '' Max(Field1) "、" MyTable ")'は、 '' DMax( "Field1"、 "MyTable")のようにあまり最適化されていません。 –

+0

私は完全にSQL私の目的のために、DLookupメソッドは正常に動作します。 – Quark

関連する問題