[SQL] CTE에서 테이블의 업데이트 기록
SQLCTE에서 테이블의 업데이트 기록
나는 전체 송장에 대해 나에게 DocTotal을 줄 것이다 다음 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 값을 입력합니다.
그것이 무엇인가, 내가 일하지 않을 알고 내가 뭔가를 놓친 거지 알아?
해결법
-
==============================
1.열팽창 계수에 당신이 만드는 업데이트는 소스 테이블에 계단식됩니다.
열팽창 계수에 당신이 만드는 업데이트는 소스 테이블에 계단식됩니다.
나는 약간 스키마 추측했다, 그러나이 같은 작업을해야합니다.
;WITH T AS ( SELECT InvoiceNumber, DocTotal, SUM(Sale + VAT) OVER(PARTITION BY InvoiceNumber) AS NewDocTotal FROM PEDI_InvoiceDetail ) UPDATE T SET DocTotal = NewDocTotal
-
==============================
2.
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 ...
-
==============================
3.당신은 이것에 대한 CTE가 필요하지 않습니다
당신은 이것에 대한 CTE가 필요하지 않습니다
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
-
==============================
4.다음 쿼리를보십시오 :
다음 쿼리를보십시오 :
;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
from https://stackoverflow.com/questions/11562536/update-records-in-table-from-cte by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 가장 빠른 방법은 120 만 개 기록을 업데이트 (0) | 2020.04.07 |
---|---|
[SQL] SQL은 - 소수점 이하 2 자리에서 반올림 (0) | 2020.04.07 |
[SQL] 오라클 사용하여 대량 삽입 .NET (0) | 2020.04.06 |
[SQL] 절 "과"MySQL을 포함하지 않음? (0) | 2020.04.06 |
[SQL] 가입과 방법을 찾을 수 CakePHP의 (0) | 2020.04.06 |