문제

내가 어떻게 할 수있는 UPDATE 결과가 포함된 테이블의 필드 SELECT Microsoft Access 2007에서 쿼리합니다.

선택 쿼리는 다음과 같습니다.

SELECT Min(TAX.Tax_Code) AS MinOfTax_Code
FROM TAX, FUNCTIONS

WHERE (((FUNCTIONS.Func_Pure)<=[Tax_ToPrice]) AND ((FUNCTIONS.Func_Year)=[Tax_Year]))

GROUP BY FUNCTIONS.Func_ID;

업데이트 쿼리는 다음과 같습니다.

UPDATE FUNCTIONS

 SET FUNCTIONS.Func_TaxRef = [Result of Select query]
도움이 되었습니까?

해결책

글쎄, 액세스는 업데이트 쿼리에서 집계를 할 수없는 것처럼 보입니다. 그러나 선택 쿼리에서 집계를 수행 할 수 있습니다. 따라서 다음과 같은 정의로 쿼리를 만듭니다.

SELECT func_id, min(tax_code) as MinOfTax_Code
FROM Functions
INNER JOIN Tax 
ON (Functions.Func_Year = Tax.Tax_Year) 
AND (Functions.Func_Pure <= Tax.Tax_ToPrice) 
GROUP BY Func_Id

그리고 그것을 당신의 퀴어로 저장하십시오. 이제 우리는 다른 액세스 제한을 해결해야합니다. 쿼리 업데이트는 쿼리에서 작동 할 수 없지만 여러 테이블에서 작동 할 수 있습니다. 쿼리를 메이크 테이블 쿼리와 함께 테이블로 바꾸겠습니다.

SELECT YourQuery.* 
INTO MinOfTax_Code
FROM YourQuery

이것은보기 내용을 Minoftax_code라는 테이블에 저장합니다. 이제 업데이트 쿼리를 수행 할 수 있습니다.

UPDATE MinOfTax_Code 
INNER JOIN Functions ON MinOfTax_Code.func_id = Functions.Func_ID 
SET Functions.Func_TaxRef = [MinOfTax_Code].[MinOfTax_Code]

Access에서 SQL을 수행하는 것은 약간의 스트레치입니다. 프로젝트를위한 SQL Server Express Edition을 살펴 보겠습니다!

다른 팁

나는 다음 중 일부에 대해 썼습니다. 상관 하위 쿼리의 제한 사항 얼마 전 Access/JET SQL에서 SQL 업데이트를 위해 여러 테이블을 조인하는 구문을 언급했습니다.해당 정보와 몇 가지 빠른 테스트를 바탕으로 단일 SQL UPDATE 문에서 Access/JET를 사용하여 원하는 작업을 수행할 수 있는 방법이 없다고 생각합니다.가능하다면 명령문은 다음과 같습니다.

UPDATE FUNCTIONS A
INNER JOIN (
  SELECT AA.Func_ID, Min(BB.Tax_Code) AS MinOfTax_Code
  FROM TAX BB, FUNCTIONS AA
  WHERE AA.Func_Pure<=BB.Tax_ToPrice AND AA.Func_Year= BB.Tax_Year
  GROUP BY AA.Func_ID
) B 
ON B.Func_ID = A.Func_ID
SET A.Func_TaxRef = B.MinOfTax_Code

또는 Access/JET를 사용하면 하위 쿼리를 별도의 쿼리로 저장한 다음 이를 보다 전통적인 방식으로 UPDATE 문에 결합할 수 있습니다.예를 들어 위의 SELECT 하위 쿼리를 FUNCTIONS_TAX라는 별도의 쿼리로 저장한 경우 UPDATE 문은 다음과 같습니다.

UPDATE FUNCTIONS
INNER JOIN FUNCTIONS_TAX
ON FUNCTIONS.Func_ID = FUNCTIONS_TAX.Func_ID
SET FUNCTIONS.Func_TaxRef = FUNCTIONS_TAX.MinOfTax_Code

그러나 이것은 여전히 ​​작동하지 않습니다.

이 작업을 수행할 수 있는 유일한 방법은 최소 Tax_Code 값의 선택 및 집계를 대역 외로 이동하는 것입니다.VBA 기능을 사용하거나 Access DLookup 기능을 사용하면 더 쉽게 이 작업을 수행할 수 있습니다.위의 GROUP BY 하위 쿼리를 FUNCTIONS_TAX라는 별도의 쿼리에 저장하고 UPDATE 문을 다음과 같이 다시 작성합니다.

UPDATE FUNCTIONS
SET Func_TaxRef = DLookup(
  "MinOfTax_Code", 
  "FUNCTIONS_TAX", 
  "Func_ID = '" & Func_ID & "'"
)

DLookup 기능은 이 쿼리가 Access 외부(예: JET OLEDB를 통해)에서 사용되는 것을 방지합니다.또한 각 FUNCTIONS 행에 대해 하위 쿼리가 실행되기 때문에 이 접근 방식의 성능은 대상 행 수에 따라 매우 끔찍할 수 있습니다(물론 순서대로 더 이상 상관 관계가 없기 때문입니다). 작동하려면).

행운을 빌어요!

나는 비슷한 문제가 있었다. 한 열에서 문자열을 찾고 같은 테이블의 다른 열에 해당 값을 넣고 싶었습니다. 아래의 선정 진술은 파렌 내부의 텍스트를 찾습니다.

액세스에서 쿼리를 만들 때 모든 필드를 선택했습니다. 해당 쿼리의 SQL보기에서 나는 마이테이블을 대체했습니다.

SELECT Left(Right(OtherField,Len(OtherField)-InStr((OtherField),"(")), 
            Len(Right(OtherField,Len(OtherField)-InStr((OtherField),"(")))-1) 

메이크 테이블 쿼리를 실행했습니다. Make Table 쿼리에는 위의 대체가있는 모든 필드가 있으며 INTO NameofNewTable FROM mytable

이것이 작동합니까? 테스트되지 않았지만 포인트를 가로 질러야합니다.

UPDATE FUNCTIONS
SET Func_TaxRef = 
(
  SELECT Min(TAX.Tax_Code) AS MinOfTax_Code
  FROM TAX, FUNCTIONS F1
  WHERE F1.Func_Pure <= [Tax_ToPrice]
    AND F1.Func_Year=[Tax_Year]
    AND F1.Func_ID = FUNCTIONS.Func_ID
  GROUP BY F1.Func_ID;
)

기본적으로 함수의 각 행에 대해 하위 쿼리는 최소 현재의 세금 코드를 결정하고 함수를 설정합니다 .func_taxref는 해당 값으로 설정합니다. 이것은 functions.func_id가 기본 또는 고유 키라고 가정합니다.

VBA 기능을 사용하는 답변을 추가하고 싶었지만 하나의 SQL 문으로 작업을 수행합니다. 하지만 느릴 수 있습니다.

UPDATE FUNCTIONS
SET FUNCTIONS.Func_TaxRef = DLookUp("MinOfTax_Code", "SELECT
FUNCTIONS.Func_ID,Min(TAX.Tax_Code) AS MinOfTax_Code
FROM TAX, FUNCTIONS
WHERE (((FUNCTIONS.Func_Pure)<=[Tax_ToPrice]) AND ((FUNCTIONS.Func_Year)=[Tax_Year]))
GROUP BY FUNCTIONS.Func_ID;", "FUNCTIONS.Func_ID=" & Func_ID)

나는이 주제가 늙었다는 것을 알고 있지만, 나는 그것에 무언가를 추가 할 수 있다고 생각했다.

MS Access 2010에서 SQL을 사용하여 선택 쿼리 작업으로 업데이트 할 수 없었습니다. Tomalak의 제안을 사용 하여이 작업을 수행했습니다. 나는 스크린 샷을 가지고 있었지만이 사이트에 게시 할 수 있도록이 사이트에 너무 많은 새로운 정보를 얻었습니다.

쿼리 디자인 도구를 사용 하여이 작업을 수행 할 수 있었지만 확인 된 성공적인 업데이트 쿼리를 살펴보면 액세스가 발생한 SQL을 보여줄 수 없었습니다. 따라서 SQL 코드 만으로이 작업을 수행 할 수 없었습니다.

선택 쿼리를 별도의 쿼리로 만들고 저장했습니다. 쿼리 디자인 도구에서 저장 한 선택 쿼리를 업데이트하려는 테이블을 추가했습니다 (고유 키를 선택 쿼리에 넣어서 링크를 링크했습니다). Tomalak이 제안한 것처럼 쿼리 유형을 업데이트하도록 변경했습니다. 그런 다음 업데이트하려는 필드를 선택하고 테이블을 지정해야했습니다. "Fields"Fields에서, 나는 내가 가져온 선택 쿼리에서 필드 이름을 입력했습니다.

이 형식은 성공적이며 원래 테이블을 업데이트했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top