0

なぜ正しい答えが得られないのか理解できません。純利益率を計算しようとしていますが、除算部分が無視されています。うまくいけば、本当に単純なものですか?

SUM(
    (dbo.K3_TradeTeam_Sales2.TotalSales - dbo.K3_TradeTeam_SalesReturn3.TotalCredits)
    ISNULL(dbo.K3_TradeTeam_Purch1.TotalPurchases, 0) / 
           dbo.K3_TradeTeam_Sales2.TotalSales
   ) AS NetMargin
4

3 に答える 3

0

SQL ロジックが機能するはずです。TotalPurchases が null でないことを確認しますか? これにより、除算が無視されているように見えますが、除算は 0 を返すだけです。つまり、マイナス ゼロを実行しています。

例:

select SUM((200 - 100) - ISNULL(100, 0) / 10) AS NetMargin --returns 90
select SUM((200 - 100) - ISNULL(null, 0) / 10) AS NetMargin --return 100
于 2012-09-25T12:40:32.200 に答える
0

純利益を得るには、おそらく次のような式が必要です。

(
    SUM(
            dbo.K3_TradeTeam_Sales2.TotalSales
        - 
            COALESCE(dbo.K3_TradeTeam_SalesReturn3.TotalCredits, 0.0)
        -
            COALESCE(dbo.K3_TradeTeam_Purch1.TotalPurchases, 0.0)
       )
/ 
    SUM(
            dbo.K3_TradeTeam_Sales2.TotalSales
       )
) AS NetMargin

ただし、スキーマを知らなければ、確かなことは言えません。0.0総売上がある場合、これも惨めに失敗します。


各関係の純利益の合計を、各関係の総収益の合計で割った値が必要だと仮定しています。これにより、すべての関係の累積利益率が得られます。

于 2012-09-25T13:29:02.127 に答える
0

数式がうまく機能しないときは、選択を一時的に変更して、各フィールドの値と計算を簡単に確認できるようにします。次に、手動で計算を行って、取得している結果がどのように得られているかを確認できます。これにより、ほとんどの場合、問題が指摘されます。

select 
    dbo.K3_TradeTeam_Sales2.TotalSales, 
    dbo.K3_TradeTeam_SalesReturn3.TotalCredits,
    ISNULL(dbo.K3_TradeTeam_Purch1.TotalPurchases, 0), 
    dbo.K3_TradeTeam_Sales2.TotalSales 
From...

また、除数が 0 の問題を処理するために、case ステートメントなしで除算を行うこともありません。決して起こらないと思っていても、何か(悪いデータ入力を含む)が将来それを起こすかもしれないと考えないために、あまりにも頻繁に人々を燃やしてしまうのを見てきました.

于 2012-09-25T13:45:29.447 に答える