2012-09-25 48 views
0

無法理解爲什麼我無法得到正確的答案。我試圖計算淨利潤率,但分紅部分被忽略。希望真的很簡單嗎?SQL數學語法與分割難度

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 
+7

請選擇真正的標題。他們應該總結你的問題。 – meagar

+2

似乎缺少一個或多個操作符(逗號,括號,數學運算符) – Prasanna

+2

除了缺少操作符,您可能會看到由於隱式轉換造成的不一致。即整數除以整數將導致一個整數,即使一個不精確地分開另一個,所以你會得到意想不到的結果。例如'SELECT 100/80'將返回'1',但是'SELECT 100.0/80'將返回'1.25'。 – GarethD

回答

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,這也會失敗。


我假設你想要每個關係的淨利潤除以每個關係總收入的總和。這將爲您提供所有關係的累計利潤率。

0

sql邏輯應該工作。 您確定TotalPurchases不爲null嗎?因爲這使得它看起來像devide被忽略,但devide只返回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 
+0

總採購有時爲空,因爲它從中取出的視圖使用左外部聯接將購買成本引入其中,但對於大多數行,情況並非如此。 – Atuitive

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... 

我也從來沒有沒有case語句來處理除數爲0的問題。即使我認爲它永遠不會發生,我也看到它經常會讓人們不去考慮某些事情(包括錯誤的數據輸入)可能會在未來發生。