我有下面的CTE,它会给我整个发票的总金额.

 ;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相关问答推荐

如何在 SQL 中连续计算大于或等于自身的所有内容?

MariaDB 中 CAST() 和 COALESCE() 的顺序很重要

使用 SQL Server 将列转换为多行

在 SQL 中搜索 WHERE 值为 SELECT,为什么现在可以工作?

如果其他行有子元素,如何避免选择没有子元素的父母行?

SQL 中扁平化的最佳 JSON 数组设置

合并具有相同 ID 的数据

在多个数据集中查找相同的行

如何在 Sql 中聚合

ORDER BY 首先具有特定值

用于排除特定邮箱域的 Where 子句

SQL - 按event/date在同一个表中Finding/Matching “pairs”

搜索数据库中包含特定列的所有表

获取 SQL Server 2018 中的第 3 大时间值

应用 GROUP BY 后判断相同的数量

视图是否自动更新

主键和代理键有什么区别?

Google Electron 表格“=QUERY”join() 等效函数?

除法( / )没有在 postgresql 中给出我的答案

查询、本机查询、命名查询和类型查询之间的区别