こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excelでやるようにフラグ立てしたい

最終的には以下のような「FLG1」、「FLG2」というカラムを追加したいです。
先頭はカラム名で、Excel上だと

 FLG1には =IF(MOD(A2,2)=0,1,0)
 FLG2には =IF(A2>=20,"L",IF(A2>=10,"M","S"))

という数式が入っています。

V1FLG1FLG2
121M
50S
290L
301L
150M


MySQLのデータベース上には、元々「tbl1」というテーブルに「V1」のカラムだけがある。
その「tbl1」に対して、新たに「FLG1」と「FLG2」というカラム(フラグ列)を追加したい。

というのが目的です。


現状だと(まだMySQL初心者のため)「V1」をそのままコピーし、UPDATEを使って、1つずつ条件判定して値を上書きしていく方法しかわかっていません。。。

例えばFLG2については以下のように(汗)

UPDATE tbl1 SET FLG2='L' WHERE V1>=20
UPDATE tbl1 SET FLG2='M' WHERE V1>=10 AND V1<20
UPDATE tbl1 SET FLG2='L' WHERE V1>=0 AND V1<10


たぶんいくつかの方法があると思うのですが、基本的なものから難しい(ちょっとテクを必要とする)ものまで幅広く教えていただけるとありがたいです。そうすれば、それを今後勉強していけるので。

投稿日時 - 2012-12-29 16:00:57

QNo.7866828

すぐに回答ほしいです

質問者が選んだベストアンサー

まず基本から
選択肢が複数ある条件分岐はIFよりCASE WHEN のほうがいいかも
また偶数奇数だけの判定ならMOD処理はIFをつかわなくても処理できます

select V1
,1-MOD(V1,2) as FLG1
,CASE WHEN V1>=20 THEN 'L' WHEN V1>=10 THEN 'M' WHEN V1>=0 THEN 'S' END as FLG2
from tbl1;

これを単純にデータを確認したいだけならviewをつかえます
create view view1 as
select V1
,1-MOD(V1,2) as FLG1
,CASE WHEN V1>=20 THEN 'L' WHEN V1>=10 THEN 'M' WHEN V1>=0 THEN 'S' END as FLG2
from tbl1;
select * from view1;

アップデートするならこんな感じ
update tbl1
set FLG1=1-MOD(V1,2)
,FLG2=CASE WHEN V1>=20 THEN 'L' WHEN V1>=10 THEN 'M' WHEN V1>=0 THEN 'S' END;
select * from tbl1;

なおストアドプロシージャなどで処理するともう少し効率的になりそうですが
今のスキルだとまだそこまでやるのは難しいかもしれませんね

投稿日時 - 2012-12-30 17:10:07

お礼

回答ありがとうございました。
(年末年始で勉強をさぼっていたため、お礼が遅くなりすみませんでした)

数式で判定(フラグ立て)する方法と、CASEによる条件判定でフラグ立てする方法がよく分かりました。

まずはupdateのやり方で確実にできるようになったので、今後はストアアドプロシージャの勉強をして、別つのやり方で効率的にできるようにしていきたいと思っています。

投稿日時 - 2013-01-05 15:44:18

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問