1

次のような SQL で更新クエリを書きたいと思います。

UPDATE A
SET A.PARENT_ID = [ID of another row]
FROM MY_TABLE AS A

私がやりたいことは、この更新が適用される行ごとに[ID of another row]、次のようなクエリから部分を計算することです。

SELECT A.NAME, B.NAME, MAX(B.ID)
FROM MY_TABLE A, MY_TABLE B
WHERE A.NAME = B.NAME

だから基本的に:

  1. 行を更新するとき、更新中の現在の行と同じ名前を持つ他の行を見つけようとします。
  2. その中で、 が最も高い行を取得しようとしますID
  3. そして、更新PARENT_ID中の現在の行のID値を、見つかった行の値に更新します。

SQL Server 2008 でそのようなことを行う方法は何ですか?

4

3 に答える 3

3

では、同じ行はすべて同じNameParentIDある必要があり、それがその名前に割り当てられた最大の ID 値である必要がありますか?

これは次のことを行う必要があります。

;with Highest as (
    select ID,Name,ParentID,MAX(ID) OVER (PARTITION BY Name) as NewParentID
    from MY_TABLE
)
update Highest set ParentID = NewParentID

参考文献:

于 2013-04-24T12:18:04.893 に答える
2

INNER JOIN UPDATE を試してください:

UPDATE A
SET A.PARENT_ID = B.mx
FROM MY_TABLE A
INNER JOIN (SELECT C.PARENT_ID mx, MAX(C.ID) OVER (PARTITION BY C.NAME)
            FROM MY_TABLE C
)B 
ON A.PARENT_ID=B.PARENT_ID

提供されるPARENT_IDものはユニークです。

于 2013-04-24T12:22:20.617 に答える