반응형
CTE에서 테이블의 레코드 업데이트
전체 송장에 대한 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 값을 열에 입력하고 싶습니다.
나는 작동하지 않을 것이라는 것을 알고 있고 내가 무언가를 놓치고 있다는 것을 알고 있습니다. 무엇입니까?
CTE에 대한 업데이트는 소스 테이블에 계단식으로 적용됩니다.
나는 당신의 스키마를 약간 추측해야했지만 이와 같은 것이 작동합니다.
;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 ...
이를 위해 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
다음 쿼리를 시도하십시오.
;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
참조 URL : https://stackoverflow.com/questions/11562536/update-records-in-table-from-cte
반응형
'IT story' 카테고리의 다른 글
공백을 제거하려면 트리밍 (0) | 2021.01.05 |
---|---|
장고에서 비밀번호 입력 필드를 만드는 방법 (0) | 2021.01.05 |
git 및 bitbucket과 함께 자신의 사용자 이름 / 비밀번호 사용 (0) | 2021.01.05 |
쉘 스크립트를 통해 echo 명령으로 mysql_secure_installation 자동화 (0) | 2021.01.05 |
파일에서 AngularJs의 변수로 HTML 템플릿로드 (0) | 2021.01.05 |