SQL Q&A

 

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

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 10:19:40   1193

コメント

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

SQL文で2つのSELCT文の結果を繋げる方法はありますでしょうか。  (1)

-.日付:2014-07-23   カテゴリ : -   閲覧数:1193

日時のデータ型について  (1)

-.日付:2014-07-23   カテゴリ : -   閲覧数:1185

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

-.日付:2014-07-22   カテゴリ : -   閲覧数:1193

sqlserverで書式チェックしたい  (1)

-.日付:2014-07-09   カテゴリ : -   閲覧数:1226

既存列にデフォルト値を設定する方法  (1)

-.日付:2014-06-30   カテゴリ : -   閲覧数:1222

縦横を入れ替えるテーブル2つ使ったSQLを教えてください  (3)

-.日付:2014-06-25   カテゴリ : -   閲覧数:1466

VBAを利用したテーブル名とフィールド名一覧取得  (1)

-.日付:2014-06-12   カテゴリ : -   閲覧数:1302

MS SQL Serverでのクエリ文

-.日付:2014-06-05   カテゴリ : -   閲覧数:1362

SQLServerのバックアップ  (1)

-.日付:2014-05-28   カテゴリ : -   閲覧数:1422

Copyright © 2015 INNOYA.COM All rights reserved. RSS