SQLServer で検索した値を使って計算を行いUPDATEしたい

ソルフォード
2014-07-22 10:19 1498 1
SQLServer で検索した値を使って計算を行いUPDATEしたい場合、
どのように記述したらいいのでしょうか。
UPDATE前
TableA
グループID ,ユーザーID ,値 ,割合
1 , 01 , 10 ,
1 , 02 , 20 ,
1 , 99 , 100 ,
2 , 01 , 30 ,
2 , 02 , 40 ,
2 , 99 , 200 ,

UPDATE後
TableA
グループID ,ユーザーID ,値 ,割合
1 , 01 , 10 , 0.10
1 , 02 , 20 , 0.20
1 , 99 , 100, 1.00
2 , 01 , 30 , 0.15
2 , 02 , 40 , 0.20
2 , 99 , 200 , 1.00


上記のようなテーブルがあったときに、
グループIDごとに、ユーザーIDが"99"の値で割り、
その割合を割合列にUPDATEしたいと考えています。

"99"の値を検索することはできたのですが、
その値を使って計算することができません。
どのように記述すればいいのでしょうか。


つたない記述で申し訳ないのですが、
ご回答のほどよろしくお願いいたします。

コメント

2014年 07月 22日 (16:33)
こんにちは。
イノ(inno)です。

UPDATE FROM文を使います。

下記にテスト用のSQLを準備しましたので、実行してデータをご確認ください。

-- #### テストテーブル作成
CREATE TABLE dbo.TempData
(
GroupID int
, UserID varchar(10)
, DataValue int
, DataRate float
)
GO

-- #### テストデータ登録
INSERT INTO dbo.TempData (GroupID, UserID, DataValue, DataRate) VALUES (1,'01',10, NULL)
INSERT INTO dbo.TempData (GroupID, UserID, DataValue, DataRate) VALUES (1,'02',20, NULL)
INSERT INTO dbo.TempData (GroupID, UserID, DataValue, DataRate) VALUES (1,'99',100, NULL)
INSERT INTO dbo.TempData (GroupID, UserID, DataValue, DataRate) VALUES (2,'01',30, NULL)
INSERT INTO dbo.TempData (GroupID, UserID, DataValue, DataRate) VALUES (2,'02',40, NULL)
INSERT INTO dbo.TempData (GroupID, UserID, DataValue, DataRate) VALUES (2,'99',200, NULL)

-- #### データ更新SQL
UPDATE dbo.TempData
SET DataRate = ROUND(A.DataValue / CONVERT(float,B.DataValue), 2)
FROM dbo.TempData A JOIN
(
SELECT GroupID, DataValue
FROM dbo.TempData
WHERE UserID = '99'
) B
ON A.GroupID = B.GroupID


-- #### 結果確認
SELECT * FROM dbo.TempData


-- #### 実行結果
GroupID UserID DataValue DataRate
----------- ---------- ----------- ----------------------
1 01 10 0.1
1 02 20 0.2
1 99 100 1
2 01 30 0.15
2 02 40 0.2
2 99 200 1