dポイントプレゼントキャンペーン実施中!

いつも大変参考にさせてもらっています。
いま添付画像のようなテーブルを結合し、その中で計算した結果を列追加して表示しています。

単純にこの方法だと端数が切り捨てられてしまうので赤字部分を合算しても
元の金額「121841」と一致しません。
そこで親フラグに「1」がたっているものにおいては端数分を含めた値にしたいと考えているのですが、どのようなクエリにすればよろしいのでしょうか。
(利率78.9%の行は「121841-(1827+23880)」で求めた値としたい)

アドバイスのほどよろしくお願いいたします。

「SQL JOIN結果での計算と端数処理」の質問画像

A 回答 (1件)

複雑な SQL は保守性が悪くなるのでオススメできませんが、


やるとしたら

select *,
_ case when B.親フラグ = 1 then
_ _ AA.金額 - AA.子の費用合計
_ else
_ _ {算出費用の計算式}
_ end
from ( -- 複問い合わせで、親以外の費用合計をあらかじめ計算。子が無ければ 0 とする
_ select A.PID, A.金額, coalesce(sum( {算出費用の計算式} ), 0) AS 子の費用合計
_ from A left join B on A.PID = B.FID and B.親フラグ = 0
_ group by A.PID, A.金額
) as AA
left join B on AA.PID = B.FID
    • good
    • 0
この回答へのお礼

Ogre7077さんn
回答ありがとうございます。

保守性の話はよくわかります。
ほかの人が記述したSQLを読み解かないといけない時に
よく苦労することがあります。
もし考え方ひとつでシンプルにとる方法などがあればと思ったのですが、
そのようなものがなさそうだということがわかっただけでも助かりました。

頂いたような内容とするのか、テーブル構成なども含めて再検討すべきなのか今一度よく考えてみたいと思います。

お礼日時:2016/03/07 17:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す