オラクルDB:テーブル名:商品テーブル、商品明細テーブル
フィールド名:
・商品テーブル
①商品コード(主キー:VCHAR)②商品ステータス(NUM)
・商品明細テーブル
①商品コード(主キー) ②商品フラグ(NUM) ③予備情報 (VCHAR)
上記のテーブル構成で、商品テーブルの商品コードを、
検索キーにして、商品明細を検索し、一致した商品コードがあった場合に、
商品フラグが1の場合は、商品ステータスに1をセットする。
商品フラグが1以外の場合は、
予備情報を判定して、値が入っている場合は、商品ステータスに2をセットする。
値が入ってない場合は、商品ステータスに3をセットする。
上記のようなSQLを組みたいのですが、ご回答をよろしくお願いします。
オラクルDB:テーブル名:商品テーブル、商品明細テーブル
フィールド名:
・商品テーブル
①商品コード(主キー:VCHAR)②商品ステータス(NUM)
・商品明細テーブル
①商品コード(主キー) ②商品フラグ(NUM) ③予備情報 (VCHAR)
上記のテーブル構成で、商品テーブルの商品コードを、
検索キーにして、商品明細を検索し、一致した商品コードがあった場合に、
商品フラグが1の場合は、商品ステータスに1をセットする。
商品フラグが1以外の場合は、
予備情報を判定して、値が入っている場合は、商品ステータスに2をセットする。
値が入ってない場合は、商品ステータスに3をセットする。
上記のようなSQLを組みたいのですが、ご回答をよろしくお願いします。
で、どこが分からないのですか?
GGさん、レスありがとうございます。
分からないのは、上記でSQLの記述が分からないんです。
簡単なselect文しか知識がないので・・・
できましたら、SQL文を教えていただきたいのですが。
よろしくお願いします。
UPDATE分は分かりますか?
失礼しました、誤記です。
×UPDATE分
○UPDATE文
下記条件でUPDATEを3回やればいいんじゃないでしょうか
1)商品フラグが1の場合
2)商品フラグが1以外かつ予備情報に値が入っている場合
3)商品フラグが1以外かつ予備情報に値が入っていない場合
GGさん、アドバイスを有難うございます。
少し質問がおかしくて、
商品テーブルのステータスにselect文で別の列名(ASを使って)
1回のselect文でセットしたいんです。
DECODEを使えるかとも、思ったんですけど、
条件が3つもあるので・・・
具体的なselectを教えていただけますでしょうか。
それぞれの条件でSelect文作ってUnionするのが
一番手っ取り早いでしょう。
今・・・オラクルのマシンが止まっていますので・・・
SQL Server 2000 でですが・・・下記のようなSQL文
で、できます。
UPDATE 商品
SET 商品ステータス =
CASE 商品明細.商品フラグ
WHEN 1 THEN 1
ELSE
CASE
WHEN 商品明細.予備情報 <> '' THEN 2
ELSE 0
END
END
from 商品 join 商品明細 on 商品.商品コード = 商品明細.商品コード
オラクルでは、このままで動かないかとは思いますが、ご参考
までに・・・
※ 商品明細.予備情報 <> '' の判定部分は、アレンジして
下さいネ!
以上。
をを〜3を代入するの忘れていました。
正しくは、
UPDATE 商品
SET 商品ステータス =
CASE 商品明細.商品フラグ
WHEN 0 THEN 0
WHEN 1 THEN 1
ELSE
CASE
WHEN 商品明細.予備情報 <> '' THEN 2
ELSE 3
END
END
from 商品 join 商品明細 on 商品.商品コード = 商品明細.商品コード
この方が確実かと・・・
※ 重ねて・・・あくまでSQL Server の文法です。
オラクルでは確認していませんので・・・
ご参考までに。
以上。
追伸・・・
商品テーブル(多分、マスタ)
商品明細テーブル(多分、履歴)
このテーブルへのレコードの発生では、商品明細へのレコード
の発生順序では、上記SQL文では、最後に発生したレコード
でステータスが確定してしまうことになりますので、因果関係
として、明細の最終レコードにするのか、総合的な結果とする
のかで、結果が変わってきます。
よって、明細の方には、発生の順序を決める連番か日付・時刻
情報を追加して、それらを利用するのかどうか・・・
該当商品コードの連番のMAXを取るか、日付・時刻のMAX
を取るのかどうかの因果関係を明確にして下さい。
お分かりになるでしょうか?
※ 1文で実行しようが、複数回にSQL文を実行しようが、
それらの因果が成立しないと、思わぬ結果になってしまい
ますので、お気をつけ下さい。
以上。
ツイート | ![]() |