Atualizar registros na tabela do CTE

Eu tenho o seguinte CTE que me dará o DocTotal para toda a fatura.

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

Agora, com este resultado, quero inserir na coluna o valor do DocTotal dentro de PEDI_InvoiceDetail.

Eu sei que não vai funcionar e eu sei que estou perdendo alguma coisa, o que é isso?

As atualizações que você fizer no CTE serão enviadas em cascata para a tabela de origem.

Eu tive que adivinhar seu esquema um pouco, mas algo assim deveria funcionar.

 ;WITH T AS ( SELECT InvoiceNumber, DocTotal, SUM(Sale + VAT) OVER(PARTITION BY InvoiceNumber) AS NewDocTotal FROM PEDI_InvoiceDetail ) UPDATE T SET DocTotal = NewDocTotal 
 WITH CTE_DocTotal (DocTotal, InvoiceNumber) AS ( SELECT InvoiceNumber, SUM(Sale + VAT) AS DocTotal FROM PEDI_InvoiceDetail GROUP BY InvoiceNumber ) UPDATE PEDI_InvoiceDetail SET PEDI_InvoiceDetail.DocTotal = CTE_DocTotal.DocTotal FROM CTE_DocTotal INNER JOIN PEDI_InvoiceDetail ON ... 

Você não precisa de um CTE para isso

 UPDATE PEDI_InvoiceDetail SET DocTotal = v.DocTotal FROM PEDI_InvoiceDetail inner join ( SELECT InvoiceNumber, SUM(Sale + VAT) AS DocTotal FROM PEDI_InvoiceDetail GROUP BY InvoiceNumber ) v ON PEDI_InvoiceDetail.InvoiceNumber = v.InvoiceNumber 

Tente a seguinte consulta:

 ;WITH CTE_DocTotal AS ( SELECT SUM(Sale + VAT) AS DocTotal_1 FROM PEDI_InvoiceDetail GROUP BY InvoiceNumber ) UPDATE CTE_DocTotal SET DocTotal = CTE_DocTotal.DocTotal_1