2017-12-26 26 views
0

내 상황은 내가 단순화하는 테이블을 가지고있다 현재 값 일치 조건보다 큰 값을 선택, 다음과 같습니다MS-액세스

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'에서 집계와 식을 사용할 수 있습니다. 'DLookUp ("Max (Field1)", "MyTable")'은 덜 최적화 된'DMax ("Field1", "MyTable")' –

+0

나는 SQL 문,하지만 내 목적을 위해 DLookup 메서드를 잘 작동합니다. – Quark