none
テーブル結合する際、条件により値を置き換えたい RRS feed

  • 質問

  • 以下のようなテーブルA、Bがあります。

    テーブルA
    name showDateTime originalvalue
    -------------------------
    A    2010/3/29    0
    B    2010/3/30    1
    C    2010/3/31    2

    テーブルB
    name originalvalue replacevalue
    -------------------------
    A          0            OFF
    A          1            ON
    B          0            電源切
    B          1            電源入

    期待する出力結果
    name showDateTime originalvalue
    -------------------------
    A     2010/3/29    OFF
    B     2010/3/30    電源入
    C     2010/3/31    2

    テーブルAが履歴テーブル、テーブルBはテーブルAのoriginalValue値置換用の相対表となるテーブルです。テーブルBに該当レコードがない場合、そのままテーブルAのoriginalValue値を表示します。
    こういった場合、どのようなクエリを記載すれば期待する出力結果が得られるのでしょうか?現状、CASE、WEHN等を用いて値の置き換えるでしょうが、レコードが重複してしまってなかなか期待通りの結果が得られません。初心者で申し訳ありませんが、手助けの方頂けると助かります。

     


    どら
    2010年3月29日 9:37

回答

  • 試していませんが、以下で良いと思います。

    select A.name, A.showDateTime, isnull(B.replacevalue, A.originalvalue) as originalvalue from テーブルA as A
      left outer join テーブルB as B on A.name = B.name and A.originalvalue = B.originalValue


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/

    • 回答としてマーク NishiA 2010年3月29日 23:35
    2010年3月29日 15:19

すべての返信

  • 試していませんが、以下で良いと思います。

    select A.name, A.showDateTime, isnull(B.replacevalue, A.originalvalue) as originalvalue from テーブルA as A
      left outer join テーブルB as B on A.name = B.name and A.originalvalue = B.originalValue


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/

    • 回答としてマーク NishiA 2010年3月29日 23:35
    2010年3月29日 15:19
  • trapemiyaさん、回答ありがとうございます、無事目的とすることができました。
    私自身が全くの初心者なので、頂いた回答をよく理解できるように頑張っていきたいと思います。
    ありがとうございました!

    どら
    2010年3月29日 23:39