sql - 从 CTE 更新表中的记录

标签 sql sql-server tsql common-table-expression

我有以下 CTE,它将为我提供整个发票的 DocTotal。

 ;WITH CTE_DocTotal
 AS
 (
   SELECT SUM(Sale + VAT) AS DocTotal
   FROM PEDI_InvoiceDetail
   GROUP BY InvoiceNumber
 )

UPDATE PEDI_InvoiceDetail
SET DocTotal = CTE_DocTotal.DocTotal

现在,有了这个结果,我想将 PEDI_InvoiceDetail 中的 DocTotal 值输入到列中。

我知道这行不通,而且我知道我错过了一些东西,它是什么?

最佳答案

您对 CTE 所做的更新将级联到源表。

我不得不稍微猜测一下你的架构,但是这样的东西应该可以工作。

;WITH T AS
(   SELECT  InvoiceNumber, 
            DocTotal, 
            SUM(Sale + VAT) OVER(PARTITION BY InvoiceNumber) AS NewDocTotal
    FROM    PEDI_InvoiceDetail
)
UPDATE  T
SET     DocTotal = NewDocTotal

关于sql - 从 CTE 更新表中的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11562536/

相关文章:

mysql - ORDER BY 子句如何从 1 而不是 0 开始对记录进行排序

sql-server - 使用 SqlClient 类时如何在 SQL Server 中获取插入的 ID?

sql - 如何使用时间戳选择 20 天的 SQL 数据

sql - 如何在 PL/SQL 中将引用游标中的数据批量插入到临时表中

mysql - 年龄计算查询-优化返回时间

mysql在主查询和子查询中搜索

sql-server - 连接SELECT查询的结果只返回一个值

performance - 为什么这是索引扫描而不是索引搜索?

mysql - 在 MySQL : selecting publications on keyword but including all keywords in results

mysql - INET_ATON - mysql 查询到 ms-sql 查询