利用CTE高效率更新表記錄
以下程式碼片段展示如何利用公共表表達式(CTE)高效更新表記錄。程式碼中的 CTE CTE_DocTotal
透過匯總 PEDI_InvoiceDetail
表中的 Sale
和 VAT
欄位計算每個發票的 DocTotal
。目標是使用 CTE 中計算的值更新 PEDI_InvoiceDetail
表中的 DocTotal
欄位。
然而,原始程式碼有一個限制:對 CTE 的更新不會自動反映到來源表(PEDI_InvoiceDetail
)。為了達到預期的結果,需要修改程式碼。
改良方案:
改進後的程式碼使用了不同的 CTE,命名為 T
,它檢索 InvoiceNumber
、DocTotal
和基於每個發票的 Sale
和 VAT
值重新計算的 DocTotal
。這個新的 DocTotal
使用 OVER()
子句和 PARTITION BY
子句計算,確保計算針對每個 InvoiceNumber
分組進行。
UPDATE
語句接著使用 CTE T
將 NewDocTotal
賦值給 DocTotal
欄位。這有效地使用 CTE 計算的修訂值更新了 PEDI_InvoiceDetail
表中的 DocTotal
欄位。
以下是修改後的程式碼:
<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中文網其他相關文章!