「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:2318
現在:6


クエリーで使える計算式について

ページOpenOffice.org FAQの登録ページ
投稿者neko
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2009-05-26 17:11:55 (火)
OSWin XP
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

現在社内システムを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「クエリーデザインでエイリアス名が失われる場合がある」をご覧ください。

お名前:
題名:


添付ファイル: fileサンプルデータベース.odb 516件 [詳細]