• ベストアンサー

NULLを 0 として計算する方法は?

NULL は 0 として扱って欲しい時はどうすればよいのでしょうか? select (単価 * 数量 - 値引) as 小計 from 注文 値引がNULLだと小計が全てNULLになってしまいます。 Access関数のNz(値引)のようなのあるでしょうか?

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

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

案1 SELECT (単価 * 数量 - IF(値引,値引,'0')) as 小計 from 注文; 案2 create table の時に、 default 0 を入れる。

参考URL:
http://dev.mysql.com/doc/mysql/ja/control-flow-functions.html
xespr
質問者

お礼

ありがとうございます。できました! やっぱり案2にするのが正しいんですよね。なるべくスッキリ簡単な構造にしたい気持ちがあったので...

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

標準的なSQLの関数で、IFNULLというのがあります。 IFNULL(x,y) のような形で書きます。 x が NULL なら、y をそれ以外は x を返します。 select (単価 * 数量 - IFNULL(値引, 0)) as 小計 from 注文 と書けば、O.K.です。 4.0 で試しています。

xespr
質問者

お礼

ありがとうございます。 やっぱり標準的な関数が良いですね!

全文を見る
すると、全ての回答が全文表示されます。
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

NZ()で行けると思います。 select (NZ(単価,0) * NZ(数量,0) - NZ(値引,0)) as 小計 from 注文 でどうでしょう?

xespr
質問者

お礼

ダメでした。 どうしてか、わかりませんでした。 Check the manual that corresponds to your MySQL server version for the right syntax to use near '(値引 ... でも、NZ()というのもあるんですね。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • access Nz関数が出来ません。

    すいません、教えてください。 仕様環境 WinXP access2002 おそらくNz関数の問題だと思いますが・・ フォーム上の詳細に 「数量」「単位」「単価」「金額」とあります。 そしてフォームフッターに    「小計」・・(以下すべて通貨型のテキストボックス)    「値引き」    「値引後小計」    「消費税」    「合計」 とあります。 「小計」は=sum([数量]*[単価])でsum関数で出しています。 ただ値引きがない場合は「値引き」の項目は空(きっとNULL値?)になっていて、「値引後小計」以降の金額が表示されません。 (「値引き」に直に"0"を打ち込むと表示されるんですが) 「値引き」のテキストボックスが、常に”0”の状態にして「値引き」後の項目も出るようにしたいのですが、どうしたらよいのでしょうか? 必要な時に入力する感じにしたいのです。 Nz関数を使えば良いみたいなので、いろいろ調べて試したのですが、 どうも出来ません。 よろしくお願いします!

  • 頻繁に再計算する場合・・・

    お尋ねします。 商品ア・単価・数量・小計 商品イ・単価・数量・小計 商品ウ・単価・数量・小計 商品エ・単価・数量・小計 商品オ・単価・数量・小計 | 商品ノ・単価・数量・小計 ------------           合計 …の様に、エクセルのワークシート様の表組みがあり、各行の単価×数量=小計で、最終的に合計を計算させますが、この場合、それぞれの単価・数量の更新後処理に各行を再計算させる式を記述しなければなりません。もちろん「再計算ボタン」を押した時にのみ再計算させる等も考えられますが、エクセルみたいに各値が更新される都度、自動的に小計や合計を更新したいのですが、この場合、計算式は各箇所に記述する以外に方法はありませんか?

  • Access SQLでnull値のOrderby

    お世話になります、 AccessのSQLについて教えてください。 例えば打率をSQLの中で計算させたとします。その値で Order by して表示させたいのですが、計算結果がnull (打席が0の人)は分母が0になってしまい値が存在しない (null)ですよね、その場合にOrder byを行うとSQLでエラーになってしまいます。 このような場合皆様ならどのように回避されるでしょうか? select B.daritu From (select hit/dasu As daritu From A ) As B Order by B.daritu

  • エクセルにて伝票番号ごとに小計を出す方法

    エクセル上に日付・伝票番号・品名・数量・単価・金額(=数量*単価)等が平打ちしてあるデータがあるのですが、それを伝票番号ごとに小計を出す関数はあるのでしょうか?

  • AccessでNULLのデータを判断する方法

    ご指導、宜しくお願い致します。 Accessを経由してPostgresのデータベースへ データをインポートしていきたいのですが、 Accessから抽出したデータが空白か空白ではないのかを 判断させたいのですが、以下のように記述しているのですが、正しく判断されないようです。 どのように記述すればよいのでしょうか??? ---------------------------------------- SQL="SELECT 単価,フラグ FROM AAA_TBL" Set RS = Conn.Execute(SQL) IF RS(0) = NULL THEN  RESPONSE.WRITE "空白" ELSE  RESPONSE.WRITE "単価" END IF IF RS(1) = NULL THEN  RESPONSE.WRITE "空白" ELSE  RESPONSE.WRITE "フラグ" END IF ---------------------------------------- Accessdb:AAA_TBL フィールド名/データ型 単価/INT4 フラグ/varchar

  • Oracleのnull

    ちょっとオラクルの検索文で困ったことがでてきました。 temp ------- col1 col2 col3 と言うようなテーブルがあります。 select col1 || '(' || col2 || ')' as col from temp; というような検索文を作成しましたが、テーブルのcol1とcol2が両方とも nullのデータは'()'となってしまいます。 col1とcol2は片方だけがnullと言うことはありません。 col1がnullの場合はcol2もnullです。 このような場合col1とcol2がnullの時は、結果のcolもnullにしたいのですが どうしたら出来るのでしょうか? また、無理なら無理と教えてください。 よろしくお願いします。

  • SELECT 文の NULL列は?

    ある人に、こんなSQLを教えてもらいました。 ----------------------------- select id,tid,NULL as "res_no",account_id,name,date from t_game_bbs as a union select id,tid,res_no,account_id,name,date from t_game_res as b where del_flg != 1'; order by date DESC limit 10; -------------------------------- 不思議に思ったのが、”NULL as "res_no"”のところです。 これについて、ググッて見たのですが、明確な説明が見つかりませんでした。 これって、SQLの隠し機能なのですか?

  • NULLを含む文字列の結合で困っています。

    いつもお世話になっています。 VB.NET2003+Access2000環境です。 まず前提として、このデータベースにはユニークなフィールドがありません。(残念ながらこちらの都合では変更することはできません) 従って今まではAccessのクエリウイザードを使って文字列を結合(フィールドを結合)して、ユニークなキーを作っていました。 これを今回、VB.NETで動いているアプリの中にボタンを作り、そこからcsvファイルにエクスポートさせるような仕掛けを作ろうとしました。 ところが、あるフィールドがデータが存在したりNULLであったりするため、結合するとNULLになるデータが出現してきます。 (Accessでは結合時、NULLは無視されていたようで影響はありませんでした) これでは検索して絞り込むキーには出来ず、Accessと同じ結果が得られません。 SQL文では(というかデータアダプターに読み込ませるクエリデザイナ作成時に)どういう風に記述すればNULLがあっても区別出来るようになるのでしょうか? 簡単に言えば フィールドA と フィールドB ともにテキストタイプのデータで、BのみNULLもあり得る場合、  select a, b, a+b as tempAB from tableC というSQL文を実行した結果、tempAB が NULL だけにならない方法をご教示ください。 SELECT CASE when~end などをいろいろ試してみましたがダメでした。 よろしくお願いいたします。

  • NULL値のレコードを検索(フィルタ)したい

    アクセス2003です。 画像の様なフォームを作成しました。 感想フィールドが未記入(NULL)のレコードにフィルタを掛けたいのですが Private Sub Click() Form_テーブル1.SetFocus Form_テーブル1.Filter = "感想 = '" & Null & "'" Form_テーブル1.Filter = "感想 = '" & "" & "'" Form_テーブル1.Filter = "感想 <> '" & "*" & "'" Form_テーブル1.FilterOn = True Form_テーブル1.Requery End Sub どれも引っかかりません。 クエリでデータ型を取得してみると NULLが返って来ます。 (SELECT TypeName([テーブル1]![感想]) AS 感想 FROM テーブル1;) Null値にフィルタを書ける方法を教えてくださいませ。

  • ファイルメーカーでの顧客データベース(注文履歴)作成に関して

    FileMaker初心者です。 WindowsXPでFileMaker Pro 10を使用し、顧客データベースを作成しています。 内容は、 WEBの通信販売の顧客のデータでして、 今現在、これまであった注文の全ての内容を、下記のようにフィールドに取り込んである状態です。 (WEBで自動受注のため、受注したデータは、すべてcsvで出力できるので、 それを全て一律に取り込んだ次第です) (顧客情報) ----------------------------- 注文番号 000001 注文日  2009/4/01 出荷日  2009/4/02 氏名    ○△×男 カナ    マルサンカクバツオ Email   *******@*****.co.jp 〒     000-0000 都道府県 東京都 住所     ○○区□□12-3456 支払方法 代金引換 (注文内容) -------------------------- 注文1品名    ○○○○○○ 注文1単価 1000(円) 注文1数量 2 注文1小計 2000(円) 注文2品名   □□□□□□ 注文2単価 500(円) 注文2数量 1 注文2小計 500(円) (以上、注文番号000001の内容) | | | (顧客情報) ----------------------------- 注文番号 000002 注文日  2009/4/19 出荷日  2009/4/20 氏名    ●▲×子 カナ    マルサンカクバツコ Email   #######@######.co.jp 〒     000-0000 都道府県 東京都 住所     ○○区□□78-9 支払方法 クレジットカード (注文内容) -------------------------- 注文1品名    ●●●●●● 注文1単価 1500(円) 注文1数量 1 注文1小計 1500(円) 注文2品名   ■■■■■■■■ 注文2単価 5000(円) 注文2数量 1 注文2小計 5000(円) (以上、注文番号000002の内容) | | | | と、このように注文番号ごとに顧客の情報、注文内容の情報がフィールドごとに存在しています。 で、このデータをもとに、顧客データベースを作成したいのですが、不明な点が。 注文番号ごとにわかれてはいるが、同じ注文者が複数存在する(あくまでもひとつの注文ごとにデータが作成されているため、過去に2回購入した方は「注文番号」が2つ、3回注文した方は「注文番号」が3つ…というふうになっている)  ↓ これを、同一人物なら、同一人物でまとめることは可能なのでしょうか? たとえば、 ---------------------------- 氏名    ○△×男 カナ    マルサンカクバツオ Email   *******@*****.co.jp 〒     000-0000 都道府県 東京都 住所     ○○区□□12-3456 ----------------------------- という顧客がおり、 その方が、 〔注文履歴1〕 注文日  2009/4/01 出荷日  2009/4/02 ----------------- 注文1品名    ●●●●●● 注文1単価 1500(円) 注文1数量 1 注文1小計 1500(円) ----------------- 注文2品名   ■■■■■■■■ 注文2単価 5000(円) 注文2数量 1 注文2小計 5000(円) ----------------- 〔注文履歴2〕 注文日  2009/4/19 出荷日  2009/4/20 ----------------- 注文1品名    ●●●●●● 注文1単価 1500(円) 注文1数量 1 注文1小計 1500(円) ----------------- 注文2品名   ■■■■■■■■ 注文2単価 5000(円) 注文2数量 1 注文2小計 5000(円) ----------------- という具合に。 (できれば全履歴を一度に呼び出せればいいのですが、 ムリなら、直近3回の注文履歴が一画面で、というふうに) 別ファイルを作成し、新たにデータベース構築をすれべいいのか、それとも同じファイル内でリレーションを駆使してレイアウトを違えて作成が可能なのか…。 なにぶん、初心者でして、こうできたらいいなぁ…程度に漠然と考えている次第でして、非常にムシのいい話であるかとは思いますが、どなたか、よきアドバイスをお願いいたします。