Distinct使用時に0除算エラーが発生する

このQ&Aのポイント
  • 現在、VB6とアクセス97で構築されたシステムのメンテナンスを行なっています。下記SQLの実行時に0で除算しましたのエラーが出ます。
  • アクセス内で"SELECT DISTINCT NO FROM 指示書"というクエリを作成し実行しておくとエラーが出ずに正常に動作します。
  • 解決方法が見つからず、質問しました。ご教授よろしくお願いします。
回答を見る
  • ベストアンサー

Distinct使用時に0除算エラーが起こる

初めて投稿します。よろしくお願いします。 現在、VB6とアクセス97で構築されたシステムのメンテナンスを行なっています。下記SQLの実行時に0で除算しましたのエラーが出ます。 select * from [ SELECT DISTINCT NO FROM 指示書]. AS NOリスト order by iif(NO = "0", 9999999 ,NO) 色々試してみましたが解決方法が見つからないので質問しました。 ちなみに、アクセス内で"SELECT DISTINCT NO FROM 指示書"というクエリを作成し実行しておくとエラーが出ずに正常に動作します。 よろしければ、ご教授よろしくお願いします。

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

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8525/19377)
回答No.2

Access97でサブクエリを使うと、特定の条件下で、メモリぶっ壊して変なエラー吐いて止まる事があるので、サブクエリは使わないように。 つまり「メモリぶっ壊して暴走して、変なエラーで止まってる」のですよ。 なので >SELECT DISTINCT NO FROM 指示書"というクエリを作成し 作成したクエリに対してクエリをかけるとか、色々と小細工が必要になります。 例えば、 SELECT DISTINCT IIF(NO="0",9999999,NO) AS NNO,NO FROM 指示書 を「クエリ1」として保存しておいて SELECT NO FROM クエリ1 ORDER BY NNO と言うクエリを発行するとか。 ともかく「select * from [ SELECT ~~ ]は使っちゃいけない」ので注意すべし。 あと、VBコードを書く時も、ある特定の条件下で「VBのコンパイラが実行時エラーを吐いて、何も出来なくなる」ので注意。

1ryoryoryo1
質問者

お礼

ありがとうございました。解決しました。

その他の回答 (1)

回答No.1

そのSQLでは、0除算をやろうと思ってもできないと思いますが。 割り算ないし。

1ryoryoryo1
質問者

補足

そうなんです。自分もそう思うんですが、0除算のエラーを返すんですよ。エラーに成るSQLでクエリーを作成実行するとアクセスが死にます。

関連するQ&A

  • accessでDISTINCT 句と矛盾

    IIFで置き換えをした結果をソートしようとしましたが、 SELECT DISTINCT a,IIF(IsNull(b), 0, 1) AS c FROM shain ORDER BY a,c [Microsoft][ODBC Microsoft Access Driver] ORDER BY 句 (c) が DISTINCT 句と矛盾しています。 というエラーになりました。 正しいSQLを教えてください。 SELECT DISTINCT a,IIF(IsNull(b), 0, 1) AS c FROM shain ORDER BY a,b も試しましたが同じようにエラーになりました。

  • COUNT(DISTINCT *)がエラーになる理由を教えてください

    以下のSQL文がエラーとなるのはなぜですか? SELECT COUNT(DISTINCT *) FROM 社員 SELECT DISTINCT * FROM 社員 ならエラーにならないのにどうしてでしょうか

  • Select Distinctについて

    SQL文の質問です。フィールドがTable1に100つあるとします。 select distinct XYZ From Table1という文があるとします。 これだとXYZのフィールドしか参照していないことになると思います。 そうではなくて、他の99フィールドの値も参照(データにアクセスしたい)したいと思っています。 select distinct XYZ, * From Table1とSelect * from Table1みたいなことをやりましたがエラーが発生しました。他の99フィールドを参照する方法はあるでしょうか?

  • DISTINCTの使い方を教えて下さい

    Select 文で DISTINCT を記述すると結果(Count)は-1となってしまいます。 DISTINCTを外すと全件表示されます。 これは何がまずいのでしょうか ? 環境 DB=SQLserver 2000 + IIS 5.0 + ASP 例:Select DISTINCT TABLE1,TABLE2,TABLE3 FROM TABLE ちなみにdbをAccess で使用している時とクエリアナライザではOKでした。

  • 年月でdistinctしたい(PostgreSQL)

    PostgreSQLでdistinctの使い方についての質問です。 t_mainのDDATEカラム(DATE)に DDATE ============================ 20030929 20030930 20031001 20031002 ・ ・ ・ というデータが入っています。 このデータのうち、年月でdistinctした データが欲しいので、以下のようにSQLを組みました。 =========================================== select distinct substring(DDATE from 1 for 6) from t_main order by DDATE これでは値が取得できなかったので、次に =========================================== select distinct TO_CHAR(DDATE,'YYYYMM') from t_main order by DDATE としましたが、これも値が返ってきません。 上手に年月でdistinctできる方法を教えてください。 欲しいのは ======== 200309 200310 という結果です。 宜しくお願いいたします。

  • SQL文「DISTINCT」の「ORDER BY」について

    SQL文「DISTINCT」の「ORDER BY」について教えて下さい。 A列をDISTINCTで重複行の排除をしています。 その後、B列でORDER BYをかけたいのですが、エラーが 出てしまいます。A列でのORDER BYは成功します。 何か良い方法があれば教えて下さい。 よろしくお願いします。 SQL="SELECT DISTINCT A列 from table " &_ "WHERE (table.C列='100') " &_ "ORDER BY (table.B列) ASC " ⇒エラー    "ORDER BY (table.A列) ASC " ⇒成功

  • SQLのこと:distinctして並び替えたい

    select * from (select distinct on (aaa) * from bbb) as ccc order by ddd テーブルbbbのaaaというフィールドが重複せず、しかも他のフィールドで並び替えをしたかったら、このような書き方以外ありますか?データベースはPostgreSQLです。 この書き方で不都合が出ているというわけではありませんが、どう書けば、パフォーマンス的にも良いSQLになるか、詳しい方がいらっしゃいましたら、お願いします。

  • DISTINCTで選択した項目以外でのソート

    お世話になります。 SQLサーバ2000から、SQLサーバ2008への移行を行っております。 以下のようなSQL文は2000では許容されていたようで、問題なく(?)稼働していただのですが2008に移行したら軒並みエラーになってしまいました。 エラーで稼働確認が進まないので、修正方法を検討しているのですが、まだSQLサーバが使えない環境で確認ができません。 2000が来てから確認する予定ではありますが、以下の通りで新旧・同様のソート順になると考えて問題ございませんでしょうか。 教えていただけると幸甚です。 【例1】 SELECT DISTINCT ISNULL(T1.C1,""),T1.C2 FROM T1 ORDER BY T1.C1 →ORDER BY 項目を ISNULL(T1.C1,"")に変更 【例2】 SELECT DISTINCT T1.C1,T1.C2 FROM T1 ORDER BY T1.C1,T1.C3 →ORDER BY 項目から T1.C3 を削除する 以上です。宜しくお願いいたします。

  • SQL Server 2008 0で除算ができません。

    はじめまして、初投稿です。 初歩的な質問となるかもしれませんが、お答えください。 SQL Server Reporting Service 2008を使用しております。 表の中で率を計算し、出力する際に、 0で除算しましたとエラーが出てしまいます。 以下、設定内容です。 ■解決目標■ プレースホルダにて、率を出力したい(クエリ内では行わない) ■プレースホルダ プロパティ■ =IIF(sum(Fields!案件数.Value)=0,0,sum(Fields!受注件数.Value)/sum(Fields!案件数.Value)) ■クエリ■ select isnull(SUM(orders),0) as '受注件数', isnull(SUM(loss),0) as '失注件数', isnull(SUM(orders),0)+isnull(SUM(loss),0) as '案件数' from ~ ■エラー文■ 警告 1 [rsRuntimeErrorInExpression] textrun '受注率.Paragraphs[0].TextRuns[0]' の Value 式にエラーが含まれています。0 で除算しようとしました。 できましたら、早急なご回答をお願いいたします。

  • DISTINCT + COUNT

    みなさんこんにちは。 以下のようなSQL文のCOUNT関数を作りたいのですが、 うまい手法がわからず困っています。 SELECT DISTINCT Ta.会員ID, Tb.品番 FROM TABLE_A AS Ta LEFT JOIN TABLE_B AS Tb ON Ta.ID = Tb.ID ↑こいつのCOUNTですが、単純に SELECT COUNT(DISTINCT Ta.会員ID, Tb.品番) ~ とやるとエラーになってしまいます。 どうやってやればカウントできるのでしょうか? すごく初歩的なことだと思いますが、 ご助言お願いいたします。