连接多个表返回NULL值

时间:2018-08-06 18:20:26

标签: sql-server tsql join sql-server-2012

我有3种不同的CTE结局,我需要相互保持联系:

主表df = df.groupby('City')[['City','Country']].fillna(method = 'ffill').groupby('City')[['City','Country']].fillna(method = 'bfill') 包含所有@Policies值:

enter image description here

VehiclePolicyLimitsID

enter image description here

@LiabilityPremium

enter image description here

作为示例,我将CTE的结果模拟为3个表变量:

@HiredPremium

但是由于某种原因,LiabilityPremium的结果全为NULL:

enter image description here

我希望结果看起来像这样,总LiabilityPremium = $ 3,736

enter image description here

有什么办法可以通过某种方式获得理想的结果吗?

3 个答案:

答案 0 :(得分:4)

这是因为加法运算符两侧的null将产生null的结果。您可以使用ISNULL(LiabilityPremium, 0)示例:

ISNULL(l.LiabilityPremium,0) + ISNULL(h.LiabilityPremium,0) as LiabilityPremium

或者您可以使用COALESCE代替ISNULL

COALESCE(l.LiabilityPremium,0) + COALESCE(h.LiabilityPremium,0) as LiabilityPremium

编辑

我不确定这是否与此小数据集一致或是否符合预期,但如果总是希望@LiabilityPremium.LiabilityPremium@HiredPremium.LiabilityPremium始终为null,那么在那里无需执行添加。而是直接在这两列上使用COALESCE

COALESCE(l.LiabilityPremium, h.LiabilityPremium) as LiabilityPremium

答案 1 :(得分:2)

COALESCE(l.LiabilityPremium,0) + COALESCE(h.LiabilityPremium,0) as LiabilityPremium

答案 2 :(得分:2)

那是因为

l.LiabilityPremium + h.LiabilityPremium

如果两者中的任何一个为NULL,则表达式为NULL。

此表达式应该可以解决

COALESCE(l.LiabilityPremium, 0.00) + COALESCE(h.LiabilityPremium, 0.00)