SQLで一行更新したい

せんな
2013-06-04 23:22 1827 2
こんにちは。
今、SQLの勉強をしている初心者です。
データの1~30までの件数に、NUMBER1~30を入れたいのですがどうすればいいでしょうか?

例えば、
      X     Y       NUMBER
     GHU    KJI        0
     HUG    EER       0
     HUU    OPI        0

上記にあるNUMBERを下記のようにしたいです。

      X     Y       NUMBER
     GHU   KJI        1
     HUG   EER        2
     HUU   OPI        3

UPDATE文だと一列全部変わってしまいます。
どのような文を作ればいいのかよく分からないでいます。
よろしくお願いします。

コメント

2013年 06月 05日 (16:36)
こんにちは。
イノ(inno)です。

ROW_NUMBER を利用すればできます!!

-- 一時テーブル作成
CREATE TABLE #Test
(
x varchar(10)
,y varchar(10)
,NUMBER int
)
GO

-- データ登録
INSERT INTO #Test (x,y,NUMBER)
SELECT 'GHU', 'KJI', 0 UNION ALL
SELECT 'HUG', 'EER', 0 UNION ALL
SELECT 'HUU', 'OPI', 0 UNION ALL
SELECT 'HAA', 'OPA', 0 UNION ALL
SELECT 'HAB', 'OPB', 0 UNION ALL
SELECT 'HAC', 'OPC', 0 UNION ALL
SELECT 'HAD', 'OPD', 0 UNION ALL
SELECT 'HAE', 'OPE', 0 UNION ALL
SELECT 'HAF', 'OPF', 0 UNION ALL
SELECT 'HAG', 'EEA', 0 UNION ALL
SELECT 'HAH', 'EEB', 0 UNION ALL
SELECT 'HAI', 'EEC', 0 UNION ALL
SELECT 'HAJ', 'EED', 0
GO

--データの確認
SELECT * FROM #Test

--番号設定の準備
SELECT *
, ROW_NUMBER() OVER (ORDER BY x, y) Num
FROM #Test


--番号を更新
UPDATE #Test
SET NUMBER = A.Num
FROM (
SELECT x AS xx, y AS yy
, ROW_NUMBER() OVER (ORDER BY x, y) Num
FROM #Test
) A
WHERE x = A.xx AND y = A.yy

--もしくは下記のようにも更新できる。
--番号を更新
UPDATE #Test
SET NUMBER = B.Num
FROM #Test A
JOIN (
SELECT *
, ROW_NUMBER() OVER (ORDER BY x, y) Num
FROM #Test
) B
ON A.x = B.x AND A.y = B.y

--データの確認
SELECT * FROM #Test ORDER BY NUMBER
せんな 2013年 08月 21日 (09:29)
ありがとうございます