Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server-在表之间添加值_Sql_Sql Server 2012 - Fatal编程技术网

SQL Server-在表之间添加值

SQL Server-在表之间添加值,sql,sql-server-2012,Sql,Sql Server 2012,对,我的场景是这样的:我有3个表(财务、公共成本、其他成本) 公共成本始终包含5个字段 其他成本可以不包含任何成本 许多 总计将根据财务ID计算字段 我的问题是: 使用下面的SQL查询,如果我在其他应用程序中没有字段,那么总体合计将不会显示在我使用的视图中 SELECT sum(ProjectFinances.PFTotal+ OtherApplications.OTotal)AppTotal from ProjectFinances inner join OtherApplication

对,我的场景是这样的:我有3个表(财务、公共成本、其他成本)

  • 公共成本始终包含5个字段
  • 其他成本可以不包含任何成本 许多
总计将根据财务ID计算字段

我的问题是:

使用下面的SQL查询,如果我在其他应用程序中没有字段,那么总体合计将不会显示在我使用的视图中

SELECT 
sum(ProjectFinances.PFTotal+ OtherApplications.OTotal)AppTotal
from ProjectFinances
inner join OtherApplications on ProjectFinances.FinanceID = OtherApplications.FinanceID
group by ProjectFinances.FinanceID
下面的例子说明了这个问题,有没有一种方法可以轻松解决这个问题?基本上,OtherApplications表中没有要添加的值,因此它不需要显示它,如果它不存在,我希望它添加0。。。谢谢各位


SUM函数用于在同一列中添加值。如果要添加两个不同的列,只需删除SUM()引用。此外,如果其他应用程序中可能没有值,则应使用外部联接并将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)。对于左侧外部联接,将显示左侧表中的所有值,如果满足联接条件,则显示右侧表中的匹配值,否则显示NULL。右外部联接与此类似,只是我们希望看到右侧表中的所有值,如果满足联接条件,则会看到左侧表中的匹配值,否则会看到NULL。在您的例子中,左边的表是projectfinancials,右边的表是OtherApplications。最后一种类型的外部联接称为完全外部联接,它基本上提供了左外部联接和右外部联接的不同并集。换句话说,它将为您提供来自ProjectFinancials和其他应用程序的所有行,显示符合联接条件的匹配值,或者在联接的每一侧显示NULL。

尝试此(未测试)

  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我真的不知道您在这里想做什么,但这就是您要求的;)希望它有帮助。

仍然只是单独显示这两个值,感谢您的帮助。谢谢:)我可以问一下内部联接和左联接/左外部联接之间的区别吗?我会接受这个答案,当它让我。。。我会用更多的解释来更新答案。这要求PFTotal和OTotal都包含在group子句中,当我在中添加时,只会再次显示2个结果,感谢您的帮助you are welcom,但您能解释一下问题所在,以便我能帮到您吗?上面的答案有效,基本上,当在唯一FinanceID下的OtherApplications中没有添加值时,它不会显示值,而不是显示100+(0或null)它没有显示值哦,我明白了,很抱歉,我不能尽快提供帮助;)