2

我有 2 张桌子正在尝试加入SQL Server。表一是salesId's 的列表,表二是每个月的平均销售额列表salesId

表格1 :

SalesId
 0001
 0004
 0345
 1009
 2290
 ....

表2:

SalesId    AvgMnthSales
 0001       22253.34
 0002        8970.28
 0003       15377.45
 0004         349.03
 0005        3498.44
 ....         ...

所以我做了这样的加入:

Select t1.SalesId, t2.AvgMnthSales
from table1 t1
left join
table2 t2
on t1.SalesId = t2.SalesId

得到这样的东西:

   SalesId      AvgMnthSales
     0001        22253.34
     0004          349.03
     0345         NULL
     1009         NULL
     2290         8846.56
     ....          ....

我更喜欢将任何NULL转换为0​​ . 我已经看到了一些示例,其中这是在将结果发送到临时表然后将NULL's 转换为 's 的两步过程中完成0的,但很好奇是否有单步方法可以做到这一点。

究其原因,很大程度上是因为无知。我不确定临时表是如何处理的(在磁盘中RAM或在磁盘上)以及它们占用了多少空间,因为这是一个大型数据集,它可能会占用几个GB或几个RAM磁盘空间。

任何建议,将不胜感激。

4

5 回答 5

4
isnull(avgmnthsales,0)

应该管用

于 2012-09-10T17:49:08.897 回答
4
Select t1.SalesId, COALESCE(t2.AvgMnthSales,0) as AvgMnthSales
from table1 t1
left join
table2 t2
on t1.SalesId = t2.SalesId
于 2012-09-10T17:49:18.657 回答
4

使用 COALESCE 函数:

Select t1.SalesId, coalesce(t2.AvgMnthSales, 0)
from table1 t1
left join
table2 t2
on t1.SalesId = t2.SalesId
于 2012-09-10T17:49:18.930 回答
2

COALESCE将返回第一个不为空的参数。对于您的情况,t2.AvgMnthSales除非它为 NULL,否则它将返回,此时它将返回第二个参数:0

SELECT t1.SalesId, COALESCE(t2.AvgMnthSales, 0) AS AvgMnthSales
FROM table1 AS t1
LEFT OUTER JOIN table2 AS t2 ON t1.SalesId = t2.SalesId
于 2012-09-10T17:49:51.960 回答
2

您可以使用COALESCEIFNULL

Select t1.SalesId, COALESCE(t2.AvgMnthSales, 0) AS AvgMnthSales
from table1 t1
left join
table2 t2
on t1.SalesId = t2.SalesId

如果您实际上不希望值得到任何结果,请NULL使用 anINNER JOIN而不是LEFT JOIN.

于 2012-09-10T17:50:35.527 回答