初期テーブルと結合テーブルの結合に基づいて、SQL Server テーブルの列をインクリメントしようとしています。アイデアは、を更新し、結合から返された行数に基づいて 1 から始まる増分番号に列をtblForm10Objectives
設定し、が数値に等しいことです。これまでのクエリの例: ObjectiveNumber
tblForm10GoalsObjectives
tblForm10Objectives
ID_Form10Goal
Update tblForm10Objectives
Set ObjectiveNumber = rn
From (
Select ROW_NUMBER() over (PARTITION by OG.ID_Form10Goal) as rn
, *
From (
Select *
From tblForm10GoalsObjectives OG
Join tblForm10Objectives O On OG.ID_Form10Objective = O.ID_Form10Objective
Where OG.ID_Form10Goal = 4
Order by O.ID_Form10Objective
) as tblForm10Objectives;
クエリの選択部分が実行されると、列が表示されるので、ObjectiveNumber
is currently 0 where ID_Form10Goal
= 4であることがわかります
更新が実行されたら、ObjectiveNumber
に 1 、 2; を表示する必要があります。ID_Form10Goal
= 4には 2 つの行があるためです。
この update ステートメントのロジックに新しいテーブルを導入する必要がありました。テーブル名は tblForm10Goals です。目標は、ID_Form10Goal ではなく ID_Agency によって取得する必要があります。「マルチパート識別子 'dbo.tblForm10Objectives.ID_Form10Objective = rns.ID_Form10Objective' をバインドできませんでした」というエラー メッセージが表示されます。次の SQL Update ステートメントを使用しています。
UPDATE dbo.tblForm10Objectives
SET ObjectiveNumber = rn
FROM tblForm10Goals As g
Left Join tblForm10GoalsObjectives gobs ON g.ID_Form10Goal = gobs.ID_Form10Goal
Right Join
(
SELECT
ROW_NUMBER() OVER (PARTITION BY g.ID_Agency
ORDER BY OB.ID_Form10Objective) AS rn,
OB.ID_Form10Objective
FROM tblForm10Goals g
LEFT JOIN dbo.tblForm10GoalsObjectives gobs ON g.ID_Form10Goal = gobs.ID_Form10Goal
RIGHT JOIN dbo.tblForm10Objectives OB ON gobs.ID_Form10Objective = OB.ID_Form10Objective
Where g.ID_Agency = 2
) rns ON dbo.tblForm10Objectives.ID_Form10Object = rns.ID_Form10Objective