对于不存在的值强制值为0

use*_*437 1 sql isnull

小组,我将尝试尽力解释这一点,我希望它能使(某些)有意义.我从我创建的视图中提取数据,该视图告诉我"赞助商"的客户类型以及客户类型中有多少帐户在1年,2年和3年后处于非活动状态.例如:

SponsorID | CustomerType | ExpiredAfter | Total
1234        D              1 Year         5
1234        RA             1 Year         7
1234        CA             1 Year         3
1234        D              2 Years        2
1234        RA             2 Years        4
1234        CA             2 Years        1
1234        D              3 Years        8
1234        RA             3 Years        1
1234        CA             3 Years        6
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是SponsorID可能没有任何已过期1年的RA,因此数据中没有任何内容.所以不要得到:

SponsorID | CustomerType | ExpiredAfter | Total
1235        D              1 Year         5
1235        RA             1 Year         0
1235        CA             1 Year         3
Run Code Online (Sandbox Code Playgroud)

我明白了:

SponsorID | CustomerType | ExpiredAfter | Total
1235        D              1 Year         5
1235        CA             1 Year         3
Run Code Online (Sandbox Code Playgroud)

同样,不确定这是否有任何意义,但我想要做的是包括所有ExpiredAfter的所有客户类型,无论是否有值.如果没有值,我只想强制0或Null.出于报告目的,我需要将该数据行设为0.

有什么建议?

pix*_*x0r 8

听起来你需要用一个LEFT JOIN而不是一个INNER JOIN.


Tim*_*thy 6

您可能还必须使用ISNULL(total,0)或COALESCE(total,0),具体取决于您使用的DBMS和查询(如womp所述)...因为如果计算TOTAL,则具有空值来自LEFT JOIN仍然会让你没有0值.