SQL Server - 在表之间添加值

时间:2014-09-08 15:14:28

标签: sql sql-server-2012

是的,我的情况是这样的:我有3张桌子(财务,CommonCosts,OtherCosts)

  • CommonCosts 始终包含5个字段
  • 其他成本可以不包含任何内容 许多

总计将根据 FinanceID

计算字段

我的问题是:

使用下面的SQL Query,如果我在OtherApplications中没有字段,那么OverallTotal将不会显示在我正在使用的视图中......

SELECT 
sum(ProjectFinances.PFTotal+ OtherApplications.OTotal)AppTotal
from ProjectFinances
inner join OtherApplications on ProjectFinances.FinanceID = OtherApplications.FinanceID
group by ProjectFinances.FinanceID

以下示例显示了问题,有没有办法轻松解决这个问题?它基本上是这样的事实,在OtherApplications表中没有值添加所以它不打扰显示它,我希望它添加0,如果它不存在...谢谢你们

enter image description here

2 个答案:

答案 0 :(得分:2)

SUM函数用于在同一列中添加值。如果要添加两个不同的列,只需删除SUM()引用。此外,如果可能在OtherApplications中没有值,则应使用外连接并将NULL替换为0.将它们放在一起并且您有:

SELECT 
ProjectFinances.PFTotal + ISNULL(OtherApplications.OTotal, 0) as AppTotal
from ProjectFinances
left outer join OtherApplications on ProjectFinances.FinanceID = OtherApplications.FinanceID

内部与外部加入

仅当右侧表中的行与连接条件的左侧表中的值匹配时,内部联接才会显示值。在您的情况下,这意味着只有在OtherApplications表中有一行时,您才会获得结果,其中FinanceID的值与ProjectFinances表中的行相同。

外连接将显示其中一个或两个表的值,具体取决于您使用的外连接的类型,以及连接另一侧的匹配行(否则为NULL)。对于LEFT外连接,将显示LEFT侧表中的所有值,如果满足连接条件,则显示右侧表中的匹配值,否则显示NULL。右外连接是类似的 - 除了我们期望看到来自右侧表的所有值以及来自左侧表的匹配值(如果满足连接条件)或否则为NULL。在您的情况下,LEFT边表是ProjectFinances,右边表是OtherApplications。最后一种类型的外连接称为FULL外连接,它基本上会为您提供LEFT外连接和RIGHT外连接的不同并集。换句话说,它将为您提供ProjectFinances和OtherApplications中的所有行,显示满足连接条件的匹配值,否则在连接的每个相应侧显示NULL。

答案 1 :(得分:0)

试试这个(UNTESTED)

  SELECT 
    SUM(ISNULL(ProjectFinances.PFTotal,0)+ ISNULL(OtherApplications.OTotal,0))AppTotal
    from ProjectFinances
    inner join OtherApplications on ProjectFinances.FinanceID = OtherApplications.FinanceID
    group by ProjectFinances.FinanceID

PS:如果有一个值添加,如果其他人给你0请求我不知道你在这里尝试做什么,但那就是你要求的;)助手它有帮助。< / p>