質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.37%

  • SQL

    1689questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

税抜から税込価格を出すSQL

受付中

回答 3

投稿 2017/12/08 10:07 ・編集 2017/12/08 10:36

  • 評価
  • クリップ 0
  • VIEW 159

yamaguti

score 91

お世話になっております。

データのコンバートを行っておりまして
データの元には、税抜価格しかもっておりません。

SQLで計算すると、ずれてしまうことがあります。
どのように税込み価格を出せばずれないでしょうか。

select trunc(税抜*1.08) from 商品マスタ
--税抜:3240円 税込3499円 1円ズレ
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • date

    2017/12/08 10:21

    例えばこういうデータがこうなってほしいという例を見せてください。また使用しているデータベースをタグに追加してください

    キャンセル

  • coco_bauer

    2017/12/08 10:24

    ずれるというのは、SQLで計算したどのような結果と、どのようなSQLではない方法で計算した結果が異なるというのですか? 具体的な方法と、計算結果例(値が異なるもの)を示してください。

    キャンセル

回答 3

+5

明細行単位、伝票単位、合計に対してどれに消費税計算をするかによって
当然結果はちがってきます。
明細位行を集計しても伝票の理論値とは合致しないし
伝票を集計しても合計の理論値は合致しません(注:誤記修正)。

会計上は合計金額に対する消費税計算をするのが正しいので、
それを厳密に解釈するなら明細行や伝票では小数点以下端数をもつしかありません
(消費税率が混在したりする場合は除く)
もちろん実際の金銭出納に端数はありえないので適当なところでまとめて
合計金額ででてくる差異を「消費税差異」として処理するのが一般的です。
税制上は最終的にとりまとめた合計の仮請消費税と支払済消費税の差異分を
納税するので、個々の取引での差異は理論的には吸収・相殺されます。

つまりは、消費税はズレても問題ないということです。
DBに登録する場合は、明細単位で適当にまるめて、消費税額として
別カラムで管理してください

投稿 2017/12/08 10:57

編集 2017/12/08 11:10

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+3

消費税の計算は端数が出て当たり前で、
税込価格の半端な数字を避けるために
本体価格+1円する事例もなくもないです。

また、財務省のホームページにこういう記載があります:

「税抜価格」に上乗せする消費税相当額に1円未満の端数が生じる場合がありますが、その端数をどのように処理 (切捨て、切上げ、四捨五入など)して「税込価格」を設定するかは、それぞれの事業者のご判断によることとなります。

消費税の計算ルールを事業体(会社や店舗)でどうやるかを明文化してあれば、
それにしたがってアルゴリズムを組むだけです。

切り捨て→floor()
切り上げ→ceil()
四捨五入→round()を使わず、0.5を加えた上でfloor()
(mysql系に限らず多くの処理系で、ROUND() で「偶数丸め(Banker's Rounding)」ルールが使用されるということで、厳密な四捨五入ではないことに注意。)


以下、質問意図を間違った回答だけど
税込価格→税抜価格に変換する必要がある場合の対処法:

私が考えたアルゴリズムじゃないですが、
前任者がこんな計算式を使ってました:
(税込価格+0.999)÷1.08の小数点切り捨て
select floor(tax_included_price+0.999)/1.08 from ~
とでもなるのでしょうか。

1円まで行かない数を足してから割ることで、
1円誤差を産まないようにする方法のようですが。
今後消費税が変わっても通用するかはわかりません。
その時は0.9999とか増やせばいいのかもしれませんが。

税抜価格と消費税を、ちゃんと別枠で管理するよう
徹底した設計にするべきですよね。

投稿 2017/12/08 11:03

編集 2017/12/08 11:26

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+3

消費税を計算した際に生じる端数の処理については、事業者の判断によるとされています。
税抜:3240円に8%の消費税を付加すると3499.2円となりますから、税込み価格は3499円(端数切り捨て、端数四捨五入)も3500円(端数切り上げ)もありえます。

3499円が1円ずれとなるということは、端数切り上げで税込み価格を計算したいという事だと思います。
端数を切り上げるためには、trunc(端数を切り捨て)関数の代わりに、ceiling(端数を切り上げ)関数を使います。

select ceiling(税抜*1.08) from f0010

<参考>
(財務省) 総額表示Q&A では、以下のように説明されています。
『(Q7) 現在の「税抜価格」を基に「税込価格」を設定する場合に円未満の端数が生じることがありますが、どのように処理して値付けを行えば良いのですか。

(答)
1.総額表示の義務付けは、消費者が値札や広告などを見れば、『消費税相当額を含む支払総額』を一目で分かるようにするためのものです。したがって、「税込価格」の設定に当たっては、一義的には、現在の「税抜価格」に消費税相当額を上乗せした金額を「税込価格」として価格設定することになります。

2.この場合、ご質問のように「税抜価格」に上乗せする消費税相当額に1円未満の端数が生じる場合がありますが、その端数をどのように処理 (切捨て、切上げ、四捨五入など)して「税込価格」を設定するかは、それぞれの事業者のご判断によることとなります。』

投稿 2017/12/08 11:03

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.37%

関連した質問

同じタグがついた質問を見る

  • SQL

    1689questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。