반응형
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
반응형
'programing' 카테고리의 다른 글
VB에 조건부 3진 연산자가 있습니까?인터넷? (0) | 2023.04.12 |
---|---|
SDK 'iOS 10.0'의 제품 유형 '응용 프로그램'에 코드 서명이 필요합니다. StickerPackExtension은 개발팀의 오류가 필요합니다. (0) | 2023.04.12 |
OpenSSL 및 openssl.conf 파일 읽기 오류 (0) | 2023.04.12 |
코코아 objective-c 클래스의 변수 앞에 있는 밑줄은 어떻게 작동합니까? (0) | 2023.04.12 |
Microsoft SQL Server Management Studio를 사용하여 데이터베이스의 ER(Entity-Relationship) 다이어그램을 생성하려면 어떻게 해야 합니까? (0) | 2023.04.12 |