私はそれがしたいと思う以下の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
しかし、それはこのエラーがスローされます:
は、私はそれがこのようなものであるべきだと思います。私は、これは動作しますが、それが吹く...少しだけここに私のオリジナルのポストを修正2008年
...
ジェフリー、私はあなたのソリューションをテストしていますSQL Server上
--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
ています私の行を357,518人から724,150人に増やす。レコードの数は同じままでなければなりません。更新が完了した後は357,518のままでなければなりません。多分、私は、Group Byをどこかに迷い込んでいるのかもしれません。私は実際の問題が何であるかはわかりません。これに関する追加的な考えは?すべての助けをありがとう!
ドキュメントから: "共通テーブル式(CTE)は、* SELECT * INSERT、UPDATE、DELETE、またはCREATE VIEWステートメントの実行スコープ内で定義される一時的な結果セットと考えることができます。強調する私。 –