T-SQLでDECODEの様な処理が可能か?

このQ&Aのポイント
  • T-SQLでPL/SQLのDECODE()の様な処理を行いたいですが、同様な関数は存在するのでしょうか?使用しているバージョンはsqlserver2000です。
  • 具体的には、Aテーブルの項目Bに設定する値をCテーブルの項目Bの値によって切り替える処理を行いたいです。
  • DECODE自体は使用できないことを確認済みです。実現可能な場合は、サンプルなどで教えて頂きたいです。
回答を見る
  • ベストアンサー

T-SQLでDECODEの様な処理

質問させて頂きます。 T-SQLでPL/SQLのDECODE()の様な処理を行いたいのですが、T-SQLでは同じ様な処理ができる関数はあるのでしょうか? やりたい処理としては、下記のINSERT文でAテーブル.項目Bに設定する値をCテーブル.項目Bの値が"1"ならBテーブル.項目Bを設定し、 それ以外ならCテーブルの.項目Bを設定するという内容です。 ※INSERT文はT-SQLで行いたい処理をPL/SQLで組んだものです。 INSERT Aテーブル ( 項目A, 項目B ) SELECT Bテーブル.項目A, DECODE(Cテーブル.項目B,'1',Bテーブル.項目B,Cテーブル.項目B) FROM Bテーブル, Cテーブル WHERE 割愛 使用しているバージョンはsqlserver2000を使用しています。 DECODE自体は使用できないことは確認済みです。実現可能か不可能や実現可能な場合はサンプルなどで教えて頂きたいです。 皆様のご助力をお願い致します。

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

  • ベストアンサー
回答No.1

CASE式を使えるのでは?

sql_2010
質問者

お礼

なるほど!失念していました。 おかげさまで解決することができました。 ありがとうございました。

関連するQ&A

  • DECODEの件

    こんにちわ。 いまORACLE9iを使用している者です。 SELECT句で"DECODE"を使って, ある項目の値がAとBの間にあるかどうか,という条件で 取得する値を切り替えたいと思い, 下記のようなSQLを書きましたが, エラーになってしまいます。 SELECT DECODE(項目名,BETWEEN A AND B, '2', '1') FROM テーブル名; PLSQLを使用しないで, このようなケースを実現したいのですが, どうすればよいでしょうか? 教えてください。 よろしくお願いします。

  • T-SQL(1件のみの取得)(再度)

    前回、-SQL(SQL Server2000)で対象データを一件のみ取得する場合、どのようにすれば良いでしょうか? 処理的に無理でしょうか? PL/SQLの"ROWNUMBER = 1"のような条件は使うことが出来ないのでしょうか? 上記の内容の質問をさせて頂いて、『TOP』が使用できるという回答をもらったのですが、この『TOP』は、SELECT文で取得しようとする場合 どのようにすれば良いでしょうか? ヘルプ等で調べてみたものの、良く理解できませんでした;; 取得内容としては、該当データ1レコード内の1フィールドを取得したいです。 /* PL/SQLから引用 */ SELECT 項目A   FROM テーブルA WHERE 項目A = 'AAA' AND 項目B = 10 AND ROWNUMBER = 1 この様な、取得方法を使用したいのですが、T-SQLではどのように行えばよろしいでしょうか? また、別の方法がありましたらお教えください。。。

  • SQLについての質問です

    SQLの質問です。(Oracle) 二つのテーブル T1, T2 に、それぞれ三つのカラム A, B, C があり、A, B の値が同じである行においてT1のCからT2のCへ値をコピーするSQLを教えてほしいです。 以下、そのデータ例です。 テーブル T1 A B C --------- 1 AAA 10 2 BBB 20 3 CCC 30 テーブル T2 A B C --------- 1 AAA 0 2 XXX 0 4 YYY 0 この場合、結果としてテーブル T2は1行目だけがカラム Cの値がT1からコピーされ A B C --------- 1 AAA 10 2 XXX 0 4 YYY 0 としたいです。

  • select insertで複数テーブルから値を取得したい

    環境:oracle9i select insertで、2つのテーブルから値を取得して、1つのテーブルにinsertすることは可能でしょうか? たとえば、以下の場合、どのようなSQL文を書けばよいか、アドバイスいただけますでしょうか。 よろしくお願いします。 insertしたいテーブル:A Aテーブルの項目:o,p,q,r,s,t 値を取得するテーブル:B,C Bテーブルの項目:o,p,q,r Cテーブルの項目:o,p,s,t oとpが主キーになっていて、それらが一致するBとCのデータを あわせて、Aにinsertしたいと思っています。 insert into A(o,p,q,r,s,t) select このあと、どのように書けばよいのかがわかりません。

  • PL/SQLでの処理について

    キーの異なる2つのトランザクションテーブルA,Bに マスタCの値を引っ張ってきて各A,B埋める処理を、テーブル名を引数にPL/SQLのプロシージャにしたいのですが、良い方法はありますか? 以下のイメージです。 <TABLE A> KEY_A C_CD C_VALUE -----+----+------- 1 3 2 3 3 1 <TABLE B> KEY_B C_CD C_VALUE -----+----+------- 1 3 2 3 3 1 <TABLE C> C_CD C_VALUE ----+-------- 1 A 2 B 3 C SQL>EXECUTE foo('A'); <TABLE A> KEY_A C_CD C_VALUE -----+----+------- 1 3 C 2 3 C 3 1 A SQL>EXECUTE foo('B'); <TABLE B> KEY_B C_CD C_VALUE -----+----+------- 1 3 C 2 3 C 3 1 A <処理イメージ> CREATE OR REPLACE PROCEDURE FOO(TNAME VARCHA2) IS c_cd NUMBER; C1 INTEGER; SQL1 VARCHAR2(2000); I INTEGER; BEGIN SQL1 := 'SELECT c_cd FROM ' || tname; C1 := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE(C1, SQL1, DBMS_SQL.V7); DBMS_SQL.DEFINE_COLUMN(C1, 1, c_cd); LOOP IF DBMS_SQL.FETCH_ROWS(C1) > 0 THEN DBMS_SQL.COLUMN_VALUE(C1, 1, c_cd); UPDATE tname set value = c_cd; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ↑ここの部分をうまくかけないでしょうか? ELSE EXIT; END IF; END LOOP; end /

  • SQLの書き方について教えてください。

    SQL Server2000で下記のようなSQL文を書きたいと思っています。 テーブルAとテーブルAに無関係な2個のフィールドを 持つテーブルBがあり、テーブルAのデータをテーブルBにコピー したいと考えています。その際にテーブルBの2個のフィールドに対して 決められた値を挿入したいのですがどのように記述すればよいのか わかりません。 お分かりの方お教えいただけませんでしょうか よろしくお願いいたします。 下記の記述をしています。 INSERT INTO テーブルB ( A, B, C, D ) SELECT テーブルA.A, テーブルA.A, XXX1, XXX2 FROM reserveSETdateTRN; Cに東京 Dに品川 を入れたいと思っています

  • ある条件でのSQLの取得方法について

    以下の条件でのSQLのデータの取得方法が分かりません。 2つのテーブルがあるとします。 ・テーブルA キー   項目1 10     X 20     Y ・テーブルB キー  項目2  項目3 10     5    C 10     6    D 12     6    E ここで取得する条件として ■テーブルAにあるのは、必ず取得します。 ■テーブルAのキーとテーブルBのキーは繋がり、繋がったテーブルBの情報は  別レコードとして取得します。 ■テーブルAのキー1つに対して、テーブルBのキーは無いかも知れないし、  複数件あるかも知れません。  無い場合はテーブルAの情報のみを出力し、複数件ある場合はその全てを出力します。 ■テーブルBの項目2が同じ値のデータがある場合、テーブルBを出力したレコードと  同じレコードに、項目2が同じデータの情報を出力します。  項目2が同じデータが無い場合はこの情報は出力しません。  項目2が同じ値のデータは最大2件しかありません。 上記の例の場合に出力したい結果 ・出力テーブルC キー  フラグ   項目1  項目2  項目3   項目2が同じキー  項目2が同じ値 10  テーブルA   X 10  テーブルB         5    C 10  テーブルB         6    D        12            E 20  テーブルA   Y (テーブルC のフラグとは、テーブルAの情報かテーブルBの情報かを示します) これを出来ればSQL、出来なければPL/SQLで取得したいのですが どちらの場合でも取得の方法に悩んでいます。 どのような方法で取得できるのでしょうか?

  • SQL INSERT文を作成したいのですが

    お世話になります。 INSERT文を作成したのですが条件が多すぎて難しいです。 教えてください。 ・AテーブルにB・C・D・Eテーブルを元にデータを抽出しINSERT処理をしたいです。 ・データはBテーブル(親)の項目1が'10'の場合 ・結合条件はCテーブル(子)=B.項目2 = C.項目2 Dテーブル(子)=B.項目2 = D.項目2 Eテーブル(子)=B.項目2 = E.項目2 アドバイスをよろしくお願いします。          

  • SQLでできますか?

    SQLでできますか? INSERT INTO test (A) VALUES (B)というSQLを発行したいのですが、このSQLのVALUESのBにあたる部分を正規表現的に指定して、一度のクエリで以下のような結果を得たいのです。 1.テーブルhogeのpiyoカラムの値の先頭がappleになっている行を探す。 2.(1.)で抽出した行のidの値をBとする。 例えば、以下のようにです。 ■皆様が回答してくださるSQL文(1クエリで行いたい) ???????????? ■皆様が回答してくださるSQL文と同等の意味を持つSQL群 INSERT INTO test (A) VALUES (100) INSERT INTO test (A) VALUES (101) INSERT INTO test (A) VALUES (102) ■テーブルhoge _____id_____piyo__________created 1. 100 applebanana 2009/01/02 2. 101 apple_12345 2009/01/03 3. 102 appleXXXXXX 2009/01/04 4. 103 bananananan 2009/01/05 5. 104 ringogogogo 2009/01/06 分かりにくい説明ですが、お詳しい方、どうかご回答の程を宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • SQL

    SQLの初心者です。 次のようなテーブルがあるとします。 項目:A , B , C , D このテーブル合計を求めたいのです。 条件は、 同一テーブルでB=10の時のAの合計とD=10の時のCの合計の合計です。 B=10の時のAの合計は「sql sum(A) from テーブル where B=10」となります。 D=10の時のCの合計は「sql sum(C) from テーブル where D=10」となります。 この2つの合計を求めたいのです。 宜しくお願いします。

    • ベストアンサー
    • MySQL

専門家に質問してみよう