• ベストアンサー

SQL文で、1,2,3、以外(0とかブランク)を1と見立てて集計したい

データを取り出す時次のように書きます SELECT テーブル1.id, テーブル1.kubun FROM テーブル1; このフィールドkubun、は本来、1、か、2、ですが 例外的にブランクや0(ゼロ)が入っています。 フィールドkubun、がブランクやゼロだったら、1に変換 しながら、テーブル1から集計するSQL文はないでしょうか? テーブル1を前もって変換しておけが、いいのですが そうした方法を使わず、集計の時に行いたいのですが

  • maaaa
  • お礼率91% (330/362)

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

  • ベストアンサー
  • dacchin
  • ベストアンサー率40% (2/5)
回答No.1

単純にやるなら、REPLACE(フィールド名, 該当する値, 変換する値) にするのはどうでしょうか。 この例でいくと SELECT テーブル1.id, REPLACE(テーブル1.kubun,0,1) FROM テーブル1 って感じですかね。 ※上の例は0を1にする形にしかしてません。 ブランクとは、全なのか半なのかわかりませんがこれもネストさせれば 十分対応できるかと思います。 ただし、nullの場合は IsNullなどを使わなければいけません。

maaaa
質問者

お礼

わかりましたありがとうございました

関連するQ&A

  • MSDEのSQLについて

    DB初心者です。 通常のAcceessで支障なく使っていた以下のようなSQL文がMSDEのビューではエラーがかかって使えません。原因と対応法を教えて頂けないでしょうか? < 「テーブル1」の「フィールド1」と「フィールド2」の相関係数を算出するSQL文 > SELECT (Sum(([フィールド1]-(SELECT AVG([フィールド1]) FROM テーブル1))*([フィールド2]-(SELECT AVG([フィールド2]) FROM テーブル1))))/Sqr(Sum(([フィールド1]-(SELECT AVG([フィールド1]) FROM テーブル1))^2)*Sum(([フィールド2]-(SELECT AVG([フィールド2]) FROM テーブル1))^2)) AS 相関係数 FROM テーブル1; これがMSDEだと下のようなエラーになります。 ADOエラー: 集計やサブクエリを含む式に対して集計関数を実行することは出来ません。 どうしたいいでしょうか? また、MSDEや易しいTransactSQLを習得する良い方法があればアドバイスを頂きたいのですが。

  • 集計についてのSQLの組み立て方

    SQLについての質問です。 MySQLを使っています。 1か月間の得意先別の入金の集計を取りたいと思っています。 表としては以下のような感じです。 ID  得意先名  現金計 振込計 相殺計 手数料計  合計 =========================================================== 001 aaaaaaa   30,000  40,000  25,000    840  95,840 002 bbbbbbb   10,000  20,000  30,000    420  60,420 SELECT * sum(nyukin) AS genkin FROM nyukin_meisai WHERE tokuisaki_id = '001' AND nyukin_kubun = '現金' AND uriage_bi BETWEEN '2014/05/01' AND '2014/05/31' SELECT * sum(nyukin) AS furikomi FROM nyukin_meisai WHERE tokuisaki_id = '001' AND nyukin_kubun = '振込' AND uriage_bi BETWEEN '2014/05/01' AND '2014/05/31' 以下続く と得意先毎/各区分ごとに一つひとつSQLを発行すればできるんでしょうけど、 これをひとつのSQLで実現したいと思っていますがSQLをどのように組み立て てよいものやら困っています。 case を組み込んだりしてもうまくいきませんでした。 どなたかご指導下さい。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQL構文(select文)でこんなことできますか?

    まずテーブル名「tableA」とそのフィールド名「No」「名前」「年齢」を用意し、Noと名前は登録必須で、年齢は任意とします。 このとき、select文でこのテーブルを呼び出すときに、年齢がブランクのデータだけとか、ブランク以外のデータを呼び出せるSQL文を教えて頂けないでしょうか?

    • ベストアンサー
    • MySQL
  • SQLで取得したフィールドをSQL文として利用

    お世話になっております。 MYSQLで sql_id (int PK) sql_data (text) のようなテーブル(sql_db)を持ち select sql_id from where (sql_data をsqlとして実行した結果 ) > 200 のように、フィールドから取得した値をSQLとして実行したりする方法はございますでしょうか。 ご教授よろしくお願いいたします。

  • 複数から成るテーブルを元に特定の月を集計するSQL

    MAINテーブルとITEMテーブルの2つがあります。両方のテーブルともIDが主キーです。 MAINテーブル Field #01: Alias:ID Type:INTEGER Field #02: Alias:CDATE Type:TIMESTAMP ※他にもいくつかフィールドが存在するが割愛 ITEMテーブル Field #01: Alias:ID Type:INTEGER Field #02: Alias:ITEM Type:STRING(20) Field #03: Alias:INCOME Type:NUMERIC(18,4) Field #04: Alias:OUTGO Type:NUMERIC(18,4) Field #05: Alias:REFID Type:INTEGER ここから、特定の年月を持つMAIN.CDATEのMAIN.ID(複数個存在する場合あり)とITEM.REFIDが一致するデータより、ITEM.INCOMEの総計からITEM.OUTGOの総計を差し引いた値を取得するSQL文を1回のクエリーで実装したいと考えています。 文章ではなかなか説明しづらいのですが、下記のようなSQL文をイメージしています。もちろんこれは正しい結果を返しませんので、どのようにSQL文を記述すれば正しい結果を得られるかの知恵をお貸しください。 /* 2010年1月の収支 */ select SUM(income) - SUM(outgo) from item where id = (select id from main where extract(year from cdate) = 2010 AND extract(month from cdate) = 1);

  • Excelワークシート上にSQL文を書き込み取得したデータをワークシート上に取得

    はじめましてこんにちわ。 現在ExcelとSQLServerでADOを使ってデータを取得したいと思っています。 SQL文をワークシート上に書いてそれを読み込んでSQL文を実行するようにしたいのですが、それを取得したあと、データをExcelワークシートに表示させる方法が思いつきません。 SQL文で指定するデータは任意の文です。そのため取得されたフィールドがいくつできるかわからない状態です。 例えば、SQL文であったら SELECT 商品ID,商品名,価格 from 商品テーブル なりますが、商品ID,商品名,価格フィールドを自動的に Excelフォーム上に作りたいということです。 ・基本的にSELECT文しか使わない ・SQL文は任意のSQL文である の条件がありますがそれはできるのでしょうか? よろしくお願いします。

  • SQL文

    こんにちは。 ACCESS2000を使用しています。 テーブルに受付番号と性別(男性=1・女性=2)のフィールドがあります。 性別のフィールドだけを使用して、男性人数・女性人数・男女の合計人数・男性比率・女性比率を求めるSQL文の書き方がわかりません。 アドバイスよろしくお願いいたします。 ※下記SQLで性別毎の人数までは出せるのですが。。。 SELECT 性別, Count(性別) AS 人数 FROM データテーブル GROUP BY 性別;

  • SQLのSELECT文で*を使わない理由

    SQLでSELECT文を使う場合、大抵  SELECT ID, user FROM u_table のように、取得する項目を指定すると思います。 これを、  SELECT * FROM u_table としないのには、トラフィックの問題以外に何か理由があるのでしょうか?

  • SQL文について困っています

    ID(NUMBER型)と NUM(NUMBER型)と nenngetu (date型)を持ったテーブルAAAから、 ID=1000 のなかで日時が一番古い処理NOをselectするSQL文を書きましたが上手く実行されません。 select NUM from AAA where nenngetu = (select min(nenngetu) from AAA) and ID=1000; ID=1000の条件をはぶき、 select NUM from AAA where nenngetu = (select min(nenngetu) from AAA); でしたら、実行できました。 oracleで実行しようとしています。 どなたか、書き方を教えてください。

  • 集計のSQLについて

    皆さんの知恵をお借りしたいと思っています。 どなたか、良い案がある方お願いいたします。 以下のテーブルがあります。 (売上テーブル) 品名   金額   購入者 ---------------------------- 鉛筆   20    Aさん 鉛筆   40    Bさん 鉛筆   30    Bさん 鉛筆   30        鉛筆   10        上のテーブルで、品名・購入者を集計キーとして、 金額を集計したい場合、 SELECT 品名,購入者,SUM(金額) FROM 売上テーブル GROUP BY 品名,購入者  というSQL文で,   品名   金額   購入者 ---------------------------- 鉛筆   20    Aさん 鉛筆   70    Bさん 鉛筆   40        という結果が得られると思いますが・・・、 これを、 品名   金額   購入者 ---------------------------- 鉛筆   20    Aさん 鉛筆   70    Bさん 鉛筆   30        鉛筆   10        という結果になるようなSQL文を作りたいのです。 購入者が入っているものについては、品名・購入者で集計して、 購入者が空欄のものは集計しないようにしたいと思っています。 UNIONを使えばできるとは思うのですが、 それ以外の方法で、1回のSQL文でできる方法があれば知りたいと思っています。 よろしくお願いします。

専門家に質問してみよう