다음과 같은 CTE를 가지고 있습니다.CTE의 결과를 사용하여 다른 테이블 업데이트
;WITH numbering AS
(
SELECT SrcID, AsOfDate, PID,
dense_rank() OVER (PARTITION BY SrcID ORDER BY PID) AS rowno
FROM RAW_DATA
)
SELECT SrcID,
MAX(CASE rowno WHEN 1 THEN PID END) AS PID1,
MAX(CASE rowno WHEN 2 THEN PID END) AS PID2,
MAX(CASE rowno WHEN 3 THEN PID END) AS PID3,
MAX(CASE rowno WHEN 4 THEN PID END) AS PID4
FROM numbering
GROUP BY SrcID
은 그뿐만 아니라 AsOfDate 및 PID를 사용해야하지만이 PID1, PID2, PID3 및 PID4을 채우는 오프 발생으로 나는 CTE에 다음을 표시하지 않습니다. . . 이 모든 것이 이제는 정확합니다. 'RAW_DATA'라는 다른 테이블을 업데이트하려면 SrcID와 AsOfDate가 필요합니다. 필요한 특정 데이터 집합을 생성하기 위해 CTE를 실행 한 다음 SrcID와 AsOfDate 간의 조인을 기반으로 RAW_DATA 테이블을 업데이트 할 수 있습니까? 잘못된 개체 이름 '번호'
;WITH numbering AS
(
SELECT SrcID, AsOfDate, PID,
dense_rank() OVER (PARTITION BY SrcID ORDER BY PID) AS rowno
FROM RAW_DATA
)
SELECT SrcID,
MAX(CASE rowno WHEN 1 THEN PID END) AS PID1,
MAX(CASE rowno WHEN 2 THEN PID END) AS PID2,
MAX(CASE rowno WHEN 3 THEN PID END) AS PID3,
MAX(CASE rowno WHEN 4 THEN PID END) AS PID4
FROM numbering
GROUP BY SrcID
INSERT INTO RAW_DATA(SrcID, AsOfDate, PID, PID1, PID2, PID3, PID4)
Select *
FROM RAW_DATA INNER JOIN numbering
ON RAW_DATA.SrcID = numbering.SrcID
AND RAW_DATA.AsofDate = numbering.AsofDate
그러나,이 오류가 발생합니다 :
는 나는 이런 식으로 뭔가해야한다고 생각합니다. 나는
제프리, 나는이 실행
--drop table Count_Unique_PID
;WITH numbering AS
(
SELECT SrcID, AsOfDate, PID,PID1,PID2,PID3,PID4,
dense_rank() OVER (PARTITION BY AsOfDate, SrcID ORDER BY PID) AS rowno
FROM RAW_DATA
)
SELECT SrcID,AsOfDate, PID,
MAX(CASE rowno WHEN 1 THEN PID END) AS PID1,
MAX(CASE rowno WHEN 2 THEN PID END) AS PID2,
MAX(CASE rowno WHEN 3 THEN PID END) AS PID3,
MAX(CASE rowno WHEN 4 THEN PID END) AS PID4
INTO Count_Unique_PID
FROM numbering
GROUP BY SrcID,AsOfDate, PID
SELECT SrcID,
AsOfDate,
PID,
PID1,
PID2,
PID3,
PID4
FROM Count_Unique_PID
GROUP BY SrcID,AsOfDate, PID,PID1,PID2,PID3,PID4
UPDATE RAW_DATA
SET PID1 = B.PID1,
PID2 = B.PID2,
PID3 = B.PID3,
PID4 = B.PID4
FROM RAW_DATA AS A INNER JOIN Count_Unique_PID As B
ON A.SrcID = B.SrcID
AND A.AsofDate = B.AsofDate
... 솔루션을 테스트하고 있습니다 ... 여기 조금 내 원래의 게시물을 수정 2008 년
SQL 서버에,하지만 그것은 불면 내 행을 357,518 건에서 724,150 건까지 올렸습니다. 레코드 수는 동일하게 유지해야합니다. 업데이트가 완료된 후에도 357,518을 유지해야합니다 ... 아직 여기서 어떤 것이 여전히 올바르지 않습니다. 어쩌면 내가 Group By를 어딘가에서 잃어 버릴지도 모른다. 나는 실제 문제가 무엇인지 모르겠다. 이것에 대한 어떤 추가 생각? 모든 도움에 감사드립니다 !!
설명서에서 "공통 테이블 식 (CTE)은 * SELECT * INSERT, UPDATE, DELETE 또는 CREATE VIEW 문 실행 범위 내에 정의 된 임시 결과 집합으로 생각할 수 있습니다." 강조. –