利用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中文网其他相关文章!