CTE를 사용하여 테이블 레코드를 효율적으로 업데이트
다음 코드 조각은 공통 테이블 표현식(CTE)을 사용하여 테이블 레코드를 효율적으로 업데이트하는 방법을 보여줍니다. 코드의 CTE CTE_DocTotal
는 PEDI_InvoiceDetail
테이블의 Sale
및 VAT
열을 요약하여 각 송장에 대한 DocTotal
을 계산합니다. 목표는 PEDI_InvoiceDetail
테이블의 DocTotal
열을 CTE에서 계산된 값으로 업데이트하는 것입니다.
그러나 원본 코드에는 제한 사항이 있습니다. CTE 업데이트는 소스 테이블에 자동으로 반영되지 않습니다(PEDI_InvoiceDetail
). 원하는 결과를 얻으려면 코드를 수정해야 합니다.
개선 계획:
향상된 코드는 T
이라는 다른 CTE를 사용합니다. 이 CTE는 각 송장의 InvoiceNumber
및 DocTotal
값을 기반으로 Sale
, VAT
및 다시 계산된 DocTotal
을 검색합니다. 이 새로운 DocTotal
은 OVER()
절과 PARTITION BY
절을 사용하여 평가되므로 각 InvoiceNumber
그룹화에 대해 평가가 수행됩니다.
UPDATE
문은 CTE T
를 사용하여 NewDocTotal
열에 DocTotal
값을 할당합니다. 이렇게 하면 PEDI_InvoiceDetail
테이블의 DocTotal
열이 수정된 CTE 계산 값으로 효과적으로 업데이트됩니다.
수정된 코드는 다음과 같습니다.
<code class="language-sql">WITH T AS ( SELECT InvoiceNumber, DocTotal, SUM(Sale + VAT) OVER(PARTITION BY InvoiceNumber) AS NewDocTotal FROM PEDI_InvoiceDetail ) UPDATE T SET DocTotal = NewDocTotal;</code>
위 내용은 SQL의 CTE에서 테이블 레코드를 효율적으로 업데이트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!