2012-09-25 25 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的问题。即使我认为它永远不会发生,我也看到它经常会让人们不去考虑某些事情(包括错误的数据输入)可能会在未来发生。