クエリーで使える計算式について †
ページ | OpenOffice.org FAQの登録ページ |
---|---|
投稿者 | neko |
分類 | |
優先順位 | |
状態 | |
カテゴリー | |
投稿日 | 2009-05-26 17:11:55 (火) |
OS | Win XP |
依存するページ | |
バージョン |
メッセージ †
回答ページでは行末に「~」を付加する必要はありません |
現在社内システムをBaseに移行できないか検討中で、色々試しているのですがクエリーの計算式が上手く使えません。 添付したもので粗利率をパーセンテージで出したいのですが、0%か100%になってしまいます。 計算式の問題でしょうか? それとも何か設定の問題でしょうか?
また添付したものでは無いのですが、何パターンか作成したクエリーのなかで、同じような計算式を使っても計算結果が「0」になってしまうときがあります。このときはエイリアスは無効になり、計算式そのものがフィールドタイトルに表示されます。 同じテーブルを使っているので違いがわかりません。漠然とした質問で申し訳ありませんが、考えられる可能性を教えてください。
以上、よろしくお願いいたします。
無題 †
ike@九州 (2009-05-26 17:51:41 (火))
理由は不明なのですが、以下何れか
…
ABS(数式)/(数式)
(数式)/ABS(数式)
ABS(数式)/ABS(数式)
で正常になります。Calc での使い方と違うので、この使い方が通常なのかは分かりません orz
割り算の小数点以下の扱い †
M.Kamataki (2009-05-26 21:51:05 (火))
ike@九州さん、回答にご協力ありがとうございます。
さて、割り算の小数点以下の扱いですが、faq/4/673「秒数から分・秒を計算するクエリー(SQL?)」のコメント「割り算の小数点以下の扱い」をご覧ください。
今回は小数点以下4桁で四捨五入しての表示(で良いですね)なので、粗利率のフィールドに以下の計算式を入れてください。割り算する数値を小数点以下4桁で表示するよう「1.0000」を掛けています。( "売上単価" * "売上個数" - "仕入単価" * "仕入個数" ) / ( ( "売上単価" * "売上個数" ) * 1.0000 )この件ですが、Baseの標準DBであるHSQLDBのドキュメントに記述がないか探しているのですが、見つかりません。Ver 1.7から(Base組み込みのものは1.8以降)「10/2.5」のような計算が正しく実行されるようになるという記述はあるんですが。
>エイリアスは無効になり、計算式そのものがフィールドタイトルに表示されます
計算式を変更したときは、エイリアス欄はクリアされてしまいます。ここは仕様ですが、クエリーデザイン上でエイリアス欄の表示が更新されないのは不具合っぽいですね。
HSQLDBのドキュメント †
M.Kamataki (2009-05-26 22:36:10 (火))
ありました。
http://hsqldb.org/doc/guide/guide.html
の「Other Numeric Types」の以下の記述が該当箇所と思います。
The distinction between DOUBLE and DECIMAL is important when a division takes place. When the terms are DECIMAL, the result is a value with a scale (number of digits to the right of the decimal point) equal to the larger of the scales of the two terms. With a DOUBLE term, the scale will reflect the actual result of the operation. For example, 10.0/8.0 (DECIMAL) equals 1.2 but 10.0E0/8.0E0 (DOUBLE) equals 1.25. Without division operations, DECIMAL values represent exact arithmetic; the resulting scale is the sum of the scales of the two terms when multiplication is performed.
ですから、もう一つの回答としては、単価フィールドのデータ型を「倍精度浮動小数点[DOUBLE]」に変更すると良いということになります。(必要に応じてROUND関数などを使ってください)
そういえば、OpenOffice.org 2.0が登場する以前に「UNIX USER」誌に書いた際、テーブルの値段など小数点の表示が必要な場合のデータ型は「倍精度浮動小数点[DOUBLE]」にしたほうが良いと書いたのを思い出しました。調べて書いた記事なので、失念していました。
大変失礼しました †
ike@九州 (2009-05-27 07:17:52 (水))
Kamatakiさんフォローありがとうございます
適当な情報で申し訳ありませんでした。nekoさんごめんなさいです。
大事な情報を知らないで先に進むところでした
それにしても、美しい記述だと思いました。
又、企業レベルでのOOoの普及はBaseを上手に使えるのかがカギになっているように思いますね。
精進しますです m(_ _)m
# Oracle 接続でも正しく動作しました
できました †
neko (2009-05-27 11:09:01 (水))
Kamatakiさん、ike@九州さん、素早い回答をありがとうございます。
データ型をDOUBLEにすることで計算できました。
社内システムにBeseを使うには、私のレベルでは大分時間がかかりそうですが
もう少し頑張ってみたいと思います。
完了とします。
完了ありがとうございます †
M.Kamataki (2009-05-27 12:15:31 (水))
データ型が「整数」で小数点表示にはまるというのは、良く聞く話ですが「DECIMAL」ではまるというのは、仕様としてどうか、という気もします。まぁ、ドキュメントに注意書きがあったので仕方ありませんが。
エイリアスの件 †
M.Kamataki (2009-05-31 14:18:38 (日))
OpenOffice.orgの不具合データベースであるIssueTrackerにIssueが登録されています。新たに質問として登録しました。faq/4/1707「クエリーデザインでエイリアス名が失われる場合がある」をご覧ください。