VBでこんなSQLを


みん  2004-09-23 17:12:38  No: 85709

オラクルDB:テーブル名:商品テーブル、商品明細テーブル
フィールド名:
・商品テーブル
  ①商品コード(主キー:VCHAR)②商品ステータス(NUM)
・商品明細テーブル
  ①商品コード(主キー)  ②商品フラグ(NUM)  ③予備情報  (VCHAR)
上記のテーブル構成で、商品テーブルの商品コードを、
検索キーにして、商品明細を検索し、一致した商品コードがあった場合に、
商品フラグが1の場合は、商品ステータスに1をセットする。
商品フラグが1以外の場合は、
予備情報を判定して、値が入っている場合は、商品ステータスに2をセットする。
                    値が入ってない場合は、商品ステータスに3をセットする。
上記のようなSQLを組みたいのですが、ご回答をよろしくお願いします。


みん  2004-09-23 17:13:05  No: 85710

オラクルDB:テーブル名:商品テーブル、商品明細テーブル
フィールド名:
・商品テーブル
  ①商品コード(主キー:VCHAR)②商品ステータス(NUM)
・商品明細テーブル
  ①商品コード(主キー)  ②商品フラグ(NUM)  ③予備情報  (VCHAR)
上記のテーブル構成で、商品テーブルの商品コードを、
検索キーにして、商品明細を検索し、一致した商品コードがあった場合に、
商品フラグが1の場合は、商品ステータスに1をセットする。
商品フラグが1以外の場合は、
予備情報を判定して、値が入っている場合は、商品ステータスに2をセットする。
                    値が入ってない場合は、商品ステータスに3をセットする。
上記のようなSQLを組みたいのですが、ご回答をよろしくお願いします。


GG  2004-09-23 20:44:18  No: 85711

で、どこが分からないのですか?


みん  2004-09-23 22:30:40  No: 85712

GGさん、レスありがとうございます。
分からないのは、上記でSQLの記述が分からないんです。
簡単なselect文しか知識がないので・・・
できましたら、SQL文を教えていただきたいのですが。
よろしくお願いします。


GG  2004-09-23 22:48:36  No: 85713

UPDATE分は分かりますか?


GG  2004-09-23 22:54:36  No: 85714

失礼しました、誤記です。
×UPDATE分
○UPDATE文

下記条件でUPDATEを3回やればいいんじゃないでしょうか

1)商品フラグが1の場合
2)商品フラグが1以外かつ予備情報に値が入っている場合
3)商品フラグが1以外かつ予備情報に値が入っていない場合


みん  2004-09-24 02:32:33  No: 85715

GGさん、アドバイスを有難うございます。
少し質問がおかしくて、
商品テーブルのステータスにselect文で別の列名(ASを使って)
1回のselect文でセットしたいんです。
DECODEを使えるかとも、思ったんですけど、
条件が3つもあるので・・・
具体的なselectを教えていただけますでしょうか。


Say  2004-09-24 04:37:38  No: 85716

それぞれの条件でSelect文作ってUnionするのが
一番手っ取り早いでしょう。


岡田 之仁  2004-09-24 05:20:36  No: 85717

今・・・オラクルのマシンが止まっていますので・・・
SQL Server 2000 でですが・・・下記のようなSQL文
で、できます。

UPDATE 商品
SET 商品ステータス = 
CASE 商品明細.商品フラグ
  WHEN 1 THEN 1
  ELSE
    CASE
      WHEN 商品明細.予備情報 <> '' THEN 2
      ELSE 0
    END
END
from 商品 join 商品明細 on 商品.商品コード = 商品明細.商品コード

オラクルでは、このままで動かないかとは思いますが、ご参考
までに・・・

※  商品明細.予備情報 <> '' の判定部分は、アレンジして
    下さいネ!

以上。


岡田 之仁  2004-09-24 05:23:53  No: 85718

をを〜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 の文法です。
    オラクルでは確認していませんので・・・

ご参考までに。

以上。


岡田 之仁  2004-09-24 05:31:59  No: 85719

追伸・・・

商品テーブル(多分、マスタ)
商品明細テーブル(多分、履歴)

このテーブルへのレコードの発生では、商品明細へのレコード
の発生順序では、上記SQL文では、最後に発生したレコード
でステータスが確定してしまうことになりますので、因果関係
として、明細の最終レコードにするのか、総合的な結果とする
のかで、結果が変わってきます。

よって、明細の方には、発生の順序を決める連番か日付・時刻
情報を追加して、それらを利用するのかどうか・・・

該当商品コードの連番のMAXを取るか、日付・時刻のMAX
を取るのかどうかの因果関係を明確にして下さい。

お分かりになるでしょうか?

※  1文で実行しようが、複数回にSQL文を実行しようが、
    それらの因果が成立しないと、思わぬ結果になってしまい
    ますので、お気をつけ下さい。

以上。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加