• 締切済み

UPDATEのCASE文で・・

SQLの独学をはじめて間もない素人です。 今case文を使って・・a_flg、b_flgを更新というコードを考えたのですが・・↓ UPDATE tm_results_payment SET a_flg = ( CASE WHEN b_flg=1 AND a_flg=1 THEN '0' END ) b_flg = ( CASE WHEN b_flg=1 AND a_flg=1 THEN '1' ELSE b_flg END ) CASE文は同じ条件です。値を2個とも変更したいので上の処理を考えました。 しかし、どうやら先に最初のCASE文でa_flgを0に変えてしまっているので、 次のCASE文では処理をしてくれません・・; 同時進行で値を更新する方法ってどうすればよいのでしょうか・・; よろしくお願いいたします。

  • MySQL
  • 回答数1
  • ありがとう数2

みんなの回答

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

update tm_results_payment set a_flg=1,b_flg=1 where b_flg=1 and a_flg=1; ――とか。

quinted_sa
質問者

補足

大変申し訳ありません;; 言葉足らずでしたっ・・ 実際のコードに書いてあるCASE文の後にwhere文は複数使用していて、 上記の2つのCASE文以外にも複数CASE文が存在しているのです;; やはり、別のSQL文を発行しなければいけないのでしょうか・・;

関連するQ&A

  • SQL Server Where句 Case文

    お世話になります。 Where句のCase文でお尋ねしたいことがあります。 ----------------------------------------------------- WHERE (A = @A) AND (B = @B) AND (C = @C) AND CASE WHEN @D = 0 THEN (dbo.TEST.D = dbo.TEST.D) '全データを WHEN @D = 1 THEN (dbo.TEST.D = 1) '値が1のデータを WHEN @D = 2 THEN (dbo.TEST.D = Is Null) 'データがNull のものを END AND (E = @E) AND (F = @F) AND (G = @G) AND (H = @H) AND CASE WHEN @I = 0 THEN (dbo.TEST.I = dbo.TEST.I) WHEN @I = 1 THEN (dbo.TEST.I = 1) WHEN @I = 2 THEN (dbo.TEST.I = Is Null) END AND (J = @J) ........ ........ ----------------------------------------------------- 上記のように CASE 文で パラメータの値により条件を変えたいのですが、なかなかうまくいきません。こんな記述の仕方ではダメということは薄々わかっているのですが、このようなCASE文をうまく動作させるにはどのように記述すればいいでしょうか? よろしくお願いいたします。

  • case構文の条件について

    cseで ------------------------------- SELECT a,b, CASE c WHEN 1 THEN "○" WHEN 0 THEN "×" END from A ; ------------------------------- というSQL文を実行すると カラムa,bには値が入っていますが カラムcは空欄になってしまいます。 CASE構文のところを、 ------------------------------- CASE c WHEN 1 THEN 1 WHEN 0 THEN "×" END ------------------------------- とするとカラムcの取得結果は、 1 × になります。 どうやら、THENを両方全角文字にすると空欄に なるようです。 ちなみにカラムcは"tinyint(1)"です。 "varchar(10)"にしても取得結果は 同じになってしまいます。 なぜこうなるのか、また、 どうやったら"○×"に限らず全角文字を 条件に出来るか教えてください。

  • VB6 case文について

    select case a case "1" and "2"    処理 case "3"    処理 end select という記述が出来るのですが、case "1" and "2" という記述は 変数a の値がどうなったとき条件をみたすのでしょうか? 初心者でして小も無い質問かもしれませんがよろしくお願いいたします。

  • WHERE句でのCASEについて

    WHERE句でのCASEの使い方についてご教授下さい。 以下の3分岐でSELECTしようとしています。 項目A=1なら、 項目B / 1000=10 のデータを。 項目A=2なら、 項目C=C のデータを。 項目A=3なら、 項目B / 1000=10 かつ項目D=D のデータを。 ※しばらくPCに触れないので確認不可ですが以下は試みたい方法です。 ただ心配なのは、例えば項目A=1のときに項目B / 1000 = 10を満たすデータと満たさないデータが存在する場合、 満たすデータまでもが抽出されないのではという心配があります。 SELECT * FROM テーブル WHERE 1 = CASE WHEN 項目A=1 THEN CASE WHEN 項目B / 1000 = 10 THEN 1 ELSE END WHEN 項目A=2 THEN CASE WHEN 項目C = C THEN 1 ELSE END WHEN 項目A=3 THEN CASE WHEN 項目B / 1000 = 10 AND 項目D = D THEN 1 ELSE END ELSE END

  • case文のand句について

    1:nの関係にあるヘッダテーブルと明細テーブルを結合後、case文で行列変換し取得しています。 抽出結果が想定外の場合があるのですが(なぜか想定とおりの場合もあります)、 case文で違うフィールドをand条件にすることはできないのでしょうか? やはり、ネストする必要がありますか? ↓このSQLだと、明細.区分=2の場合に、金額が取得できません。 select   ユーザ   ,sum(case when 明細.区分 = 1 and 明細.月 = 1 then 明細.金額 end) as 1月請求金額   ,sum(case when 明細.区分 = 1 and 明細.月 = 2 then 明細.金額 end) as 2月請求金額 , ・・・   ,sum(case when 明細.区分 = 2 and 明細.月 = 1 then 明細.金額 end) as 1月支払金額   ,sum(case when 明細.区分 = 2 and 明細.月 = 2 then 明細.金額 end) as 2月支払金額 , ・・・ from ヘッダ left join 明細 on ヘッダ.キー = 明細.キー group by ユーザ

  • CASE文について

    <環境> SQLSERVER2005 ACCESS2007 CASE文について質問です。 クエリで下記のSQL文を実行すると、「Case 式は、10 レベルまでしか入れ子にできません。」 とエラーになります。 このような場合、どのように記述すれば解決できるでしょうか? ご教授お願いします。 SELECT CASE WHEN (WA.MM = '01') THEN ROUND(SUM(WB.MONEY1), -3, 0) ELSE CASE WHEN (WA.MM = '02') THEN ROUND(SUM(WB.MONEY2), -3, 0) ELSE CASE WHEN (WA.MM = '03') THEN ROUND(SUM(WB.MONEY3), -3, 0) ELSE CASE WHEN (WA.MM = '04') THEN ROUND(SUM(WB.MONEY4), -3, 0) ELSE CASE WHEN (WA.MM = '05') THEN ROUND(SUM(WB.MONEY5), -3, 0) ELSE CASE WHEN (WA.MM = '06') THEN ROUND(SUM(WB.MONEY6), -3, 0) ELSE CASE WHEN (WA.MM = '07') THEN ROUND(SUM(WB.MONEY7), -3, 0) ELSE CASE WHEN (WA.MM = '08') THEN ROUND(SUM(WB.MONEY8), -3, 0) ELSE CASE WHEN (WA.MM = '09') THEN ROUND(SUM(WB.MONEY9), -3, 0) ELSE CASE WHEN (WA.MM = '10') THEN ROUND(SUM(WB.MONEY10), -3, 0) ELSE CASE WHEN (WA.MM = '11') THEN ROUND(SUM(WB.MONEY11), -3, 0) ELSE CASE WHEN (WA.MM = '12') THEN ROUND(SUM(WB.MONEY12), -3, 0) END END AS MONEY FROM (WA INNER JOIN WB ON (WA.YYYY = WB.YYYY)) INNER JOIN WC ON (WA.YYYY = WC.YYYY)

  • VHDLで、case文とwhen文のどちらを使おうか迷っています。

    VHDLで、case文とwhen文のどちらを使おうか迷っています。 以下のようなプログラムを作ろうと思っています。 //ここからcase文もしくはwhen文 SWの値を読み込み、 1の時signalに10を代入 2の時signalに20を代入 ・ ・ ・ 10の時signalに100を代入 //ここまでcase文もしくはwhen文 process(clk) clkが立ち上がる回数をカウントしていき、signalと同じ数になった時に1を出力 それ以外は0を出力 end process case文はprocess文で、when文は同時処理文で記述することは知っていますが、このような場合、どちらを使ったらいいのでしょうか?

  • CASE式を使ったクエリ

    <環境>SQLSERVER2005 件名について教えてください。 テーブル("TBL")にフィールドMONEY1~MONEY12までがあります。 MONEYの後ろの数字は月を表しています。 このテーブルから 1.MONEY12の値≠0円ならMONEY12の値。MONEY12の値=0円ならMONEY11の値を参照。 2.MONEY11の値≠0円ならMONEY11の値。MONEY11の値=0円ならMONEY10の値を参照。 3.MONEY10の値≠0円ならMONEY10の値。MONEY10の値=0円ならMONEY9の値を参照。 と0円でない月までさかのぼってその月の金額を求めたいのですが、 下記のようにCASE式を使うと「Case 式は、10 レベルまでしか入れ子にできません。」と エラーになります。 条件式が11レベル以上の場合抽出する方法はないのでしょうか SELECT CASE WHEN MONEY12>0 THEN MONEY12 ELSE CASE WHEN MONEY11>0 THEN MONEY11 ELSE CASE WHEN MONEY10>0 THEN MONEY10 ELSE CASE WHEN MONEY9>0 THEN MONEY9 ELSE CASE WHEN MONEY8>0 THEN MONEY8 ELSE CASE WHEN MONEY7>0 THEN MONEY7 ELSE CASE WHEN MONEY6>0 THEN MONEY6 ELSE CASE WHEN MONEY5>0 THEN MONEY5 ELSE CASE WHEN MONEY4>0 THEN MONEY4 ELSE CASE WHEN MONEY3>0 THEN MONEY3 ELSE CASE WHEN MONEY2>0 THEN MONEY2 ELSE CASE WHEN MONEY1>0 THEN MONEY1 ELSE 0 END END END END END END END END END END END END FROM TBL

  • ASPからのSQL文でエラーが発生

    ASPでoracleのデータを集計しようとしたところ、SQL文でエラーが発生してしまいました。 (ORA-00911: 文字が無効です。) 同じSQL文を「SQLPlus Worksheet」で実行してみたら、問題なく実行できました。 エラーの原因を教えてください。 SELECT CASE WHEN 処理CD = '1' AND 集計F = 'Y' THEN '1Y' WHEN 処理CD = '1' AND 集計F <> 'Y' THEN '1N' END AS kubun, COUNT(連番) AS kensu SUM(金額) AS kingaku FROM aaa WHERE 日付 = '200701' GROUP BY CASE WHEN 処理CD = '1' AND 集計F = 'Y' THEN '1Y' WHEN 処理CD = '1' AND 集計F <> 'Y' THEN '1N' END kubun毎に金額の合計値などを集計したいというような感じです。 よろしくお願い致します。

  • MySQLのトリガの制御文について

    MySQLのトリガで次のようなコーディングを行いましたが、エラーが発生して、動作しません。 ------------------------------------------------------------------------------------------------- begin UPDATE テーブルA SET テーブルAカラムX = 値, テーブルAカラムY = 値, CASE WHEN テーブルAカラムZ = 1 THEN テーブルAカラムR = 1 WHEN テーブルAカラムZ = 2 THEN テーブルAカラムR = 2 END; end -------------------------------------------------------------------- ENDをEND CASEにしたり消したり、;を色々な位置につけたり消したりしましたが、エラーが発生します。 ストアドの方でselect文中にif文やcase文を入れましたが、エラーが発生します。 大変困っております。 ご協力をお願い致します。 各バージョンは最新バージョンとします。

    • ベストアンサー
    • MySQL