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   1167

コメント

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   カテゴリ : -   閲覧数:1174

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

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

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

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

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

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

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

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

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

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

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

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

MS SQL Serverでのクエリ文

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

SQLServerのバックアップ  (1)

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

Copyright © 2015 INNOYA.COM All rights reserved. RSS