• 締切済み

SQL>UPDATEと同時にその件数をCOUNTする方法

こんにちはtmgmです。 いまTANTOU_CDとTANTOU_NAMEという項目のある T_TANTOUというテーブルがあるとします。 TANTOU_CD_|_TANTOU_NAME_ _____1_|_担当者1___ _____2_|_担当者2___ _____3_|_担当者2___ 担当者2が二人いるのがわかりますか? ここでこの担当者2を”担当者3”に(どちらも)UPDATEしつつ、UPDATEした件数をCOUNTするSQL文の 書き方が分からずに困っています。 要するに UPDATE T_TANTOU SET TANTOU_NAME = '担当者3' WHERE TANTOU_CD = '担当者2' と SELECT COUNT(TANTOU_NAME) FROM T_TANTOU を同時にやりたいってことです。 どうすればよろしいでしょうか? ご返答よろしくお願いします。

  • tmgm
  • お礼率17% (47/273)

みんなの回答

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.4

こんにちわ。 #3 の方がPL/SQL での方法を紹介されているので、 私はPro*C (Oracle) の方法をご紹介します。 INSERT 文, UPDATE 文, DELETE 文, SELECT INTO 文を実行した時の処理件数は, sqlca.sqlerrd[2] で通知されます。 詳細は、Pro*C/C++ のマニュアルで確認して下さい。

回答No.3

Oracle DB+PL/SQLであれば、以下のように出来ます。 CREATE TABLE tantou_tbl (tantou_cd NUMBER, tantou_name VARCHAR2(10)); INSERT INTO tantou_tbl VALUES (1,'担当者1'); INSERT INTO tantou_tbl VALUES (2,'担当者2'); INSERT INTO tantou_tbl VALUES (3,'担当者2'); SET SERVEROUTPUT ON DECLARE l_updated_count NUMBER; BEGIN UPDATE tantou_tbl SET tantou_name = '担当者3' WHERE tantou_name = '担当者2'; l_updated_count := SQL%ROWCOUNT; DBMS_OUTPUT.PUT_LINE(TO_CHAR(l_updated_count) || '行更新されました。'); END; /

参考URL:
http://otn.oracle.co.jp
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

どのようにしてSQLを発行しているのですか? DBは?ミドルウェアは? 処理した件数って一緒に返されている場合が多いです。 たとえばDAOではExecuteの戻り値とか。

回答No.1

使ってるソフトは何ですか? アクセスならば、重複クエリーウィザードで 重複対象をTANTOU_NAMEにすれば重複してる件数が 出ますよ。 これがUPDATE対象の件数になります。

関連するQ&A

  • COUNT関数が上手く設定できない

    COUNT関数が上手く設定できなくて困っています。 DBに案件テーブルと担当者テーブルを設定し、案件に紐付く担当者を検索できるようにしようと思っています。 案件に対して複数の担当者が担当になることがあり、案件テーブルに担当者テーブルをLeft Joinして、最後にGroup byでグルーピングすることによって案件自体は検索できるのですが、ページネーションのためCOUNT関数を使って案件数を求めようとすると、正しい数値が得られません。 select count(a.id) counts // ここをa.* とすることで案件情報を検索することはできます。 from ANKEN a left join TANTOU t on a.id = t.id where flag = 0 group by a.id 正しい件数を取得するにはどのようにすれば良いでしょうか?

    • ベストアンサー
    • MySQL
  • 動的SQLのCOUNTのとり方

    動的SQLで、DBの件数を取得したいのですが、 うまく取得できず困っています。 教えてください! 以下の様に、記述しているのですが取り方間違っていますか? EXEC SQL EXECUTE statment INTO :CNTNUM; PREPEAした、statmentには SELECT COUNT(*) FROM テーブル名 where kbn = 3; と、ごくごく普通のSELECT COUNT文です。 cnt_numは、int型のホスト変数で宣言しています。 デバックしながら実行すると、cnt_numの値は初期化した時の 0のままです。実際取得した件数が0件なのかもと思い 初期化時に3を代入して実行したら、やはり値は3でした。 なので、件数が取得出来ていないようです。 オラクルエラーにもならず、次の処理へ流れていってしまいます。 知っている方、教えてください。

  • 複雑なcountについて

    val | num ----------- 9984 | 1 1234 | 1 9876 | 1 4567 | 1 9984 | 1 1234 | 1 9984 | 1 以上のようなテーブルで SELECT COUNT(*) FROM table_name WHERE val = 9984 SELECT COUNT(*) FROM table_name WHERE val = 1234 SELECT COUNT(*) FROM table_name WHERE val = 9876 SELECT COUNT(*) FROM table_name WHERE val = 4567 のように4つ実行することなく1度に 9984 => 3 1234 => 2 9876 => 1 4567 => 1 という結果を得たいのですが方法はありますでしょうか? ご教示お願いいたします。

  • SQL 件数取得を速くしたい

    SQLでテーブルなどからSELECTされた件数を得る際に、 select count(*) from ~ 等とするかと思いますが、この結果が返ってくるのが遅くて困っています。 少しでも速く件数を得たいのですがどのような方法がありますでしょうか? 教えてください。 私が使っている環境はOracle 8iで 特に今回はgroup byを含むビューからの検索を行おうとしています。

  • count0の取り方

    2つのテーブルを結合しある項目の集計を取りたいと思ってるのですが数が0の場合の表示がされません 0を表示させる方法がわかるかたどうぞよろしくお願いします テーブル1 id | cd ---+-------- 1 | 1000 2 | 2000 3 | 3000 4 | 4000 テーブル2 id | cd ---+-------- 1 | 1000 2 | 2000 3 | 2000 4 | 4000 5 | 4000 出したい結果 cd | count -----+-------- 1000 | 1 2000 | 2 3000 | 0   ←現状では0がでません 4000 | 2 考えたSQL SELECT t1.cd,CASE THEN count(t2.cd) = NULL THEN 0 ELSE count(*) END FROM t1 LEFT OUNTER JOIN t2 ON t1.cd = t2.cd GROUP BY t1.cd ORDER BY t1.cd よろしくお願いします

  • データの件数を集計するための SQL

    データの件数を集計するための SQL について教えてください。 例えば以下のようなテーブルがあります。 ▼テーブル 名前 |交通手段|日付 -----+--------+---- Aさん|バス |5/1 Aさん|バス |5/2 Aさん|バス |5/3 Bさん|バス |5/1 Bさん|電車 |5/2 ※「日付」については、本質問に直接の関係はありません。 このテーブルにクエリを発行して、以下の結果を取得したいと考えています。 ▼取得したい結果 名前 |交通手段|回数 -----+--------+---- Aさん|バス |3 Bさん|バス |1 Bさん|電車 |1 当方がイメージしている流れは以下の通りです。 SQL は苦手でして、これをひとつにまとめることができません。 1) GROUP BY で束ねる SELECT 名前, 交通手段 FROM テーブル GROUP BY 名前, 交通手段 2) 1)の結果の1件目をSELECTする SELECT COUNT(*) FROM テーブル WHERE 名前='Aさん' AND 交通手段='バス' 3) 1)の結果の2件目をSELECTする SELECT COUNT(*) FROM テーブル WHERE 名前='Bさん' AND 交通手段='バス' 4) 1)の結果の3件目をSELECTする SELECT COUNT(*) FROM テーブル WHERE 名前='Bさん' AND 交通手段='電車' なおレンタルサーバ上 (MySQL 5.0.77) で稼働させるため、 なるべく高速な SQL を希望いたします。

    • ベストアンサー
    • MySQL
  • count(*)のcountをとりたい

    現在、以下のようなテーブルを扱っているのですが、 +---------+ |accountid| +---------+ |   999| |   999| |   638| |   638| |   638| |   999| |   999| |   638| +---------+ を、ユニークな件数でとろうとしています。 現在は > select count(*) from TABLE group by accountid; +----------+ | count(*)| +----------+ |     4| |     4| +----------+ 2 rows in set (0.00 sec) などとして、「2 rows in set」を読むと言う方法なのですが、それだと人の手を介さないといけないのでどうにか出力結果をダイレクトに取得したいのです。 SQLサーバで使えるらしい select count(*) from (select count(*) from TABLE group by accountid) as AA; と言うSQL文を使っても無理だったので、どなたか方法をご存じないでしょうか???

    • ベストアンサー
    • MySQL
  • SQLのSelect Countについて

    たびたびお世話になります。 以下のSQLを実行したらエラーになりましたが原因がわかりません。 select count(A), A from TableA where A > 0 and B is not null; 同時に該当するデータ件数とその項目を取得したかったのですが、なぜ上記のSQLがエラーになるのかわかりません。 教えてください、お願いします_(._.)_

  • 1個のSQL分で2種類以上の件数値を取得する

    SQL分の記述で質問なんですが、 データベース上に日付、時間、フラグと言う項目があります。 同一の日付、時間のものは数件ずつあります。 フラグは"b"と"1"があります。 このデータの日付・時間辺りの件数と+フラグが"1"の件数を同時に取得するSQL分はかけますでしょうか? 別々ならば、 SELECT DATE,TIME,COUNT(*) AS KENSU1 FROM W_TABLE GROUP BY DATE,TIME ORDER BY DATE,TIME と SELECT DATE,TIME,COUNT(*) AS KENSU2 FROM W_TABLE WHERE FLG="1" GROUP BY DATE,TIME ORDER BY DATE,TIME でかけると思うのですが、 1個のSQL分で記述は可能でしょうか? 処理結果を 05/02/23 12:00 10 5 05/02/24 10:00 12 3 (日付・時間・件数・フラグ="1"の件数  見たいに取得したいのですが..

  • 複数のテーブルの レコード件数所得

    sql初心者です。 php sql4.1を使って テーブルA・テーブルBの総レコード件数を所得がうまくできません。 テーブルAの◇◇が○○の含むレコード件数を所得は SELECT count(*) FROM テーブルA WHERE ◇◇ LIKE ○○ でできました。 テーブルA・テーブルBの◇◇が○○の含むレコード件数を所得はどうすればいいのでしょうか? よろしくお願いいたします.

    • ベストアンサー
    • MySQL