显示NULL和值

时间:2012-12-02 18:30:12

标签: sql-server

我有三张桌子,我有场 - area。所以我决定找到每张桌子的面积总和,并在一个视图中显示。

我已经创建了一个查询

select sum(x.area) as EquipmentSpace,sum(y.area) as ProductSpace,sum(z.area) as ShoppointSpace
from TEquipWarehouse as x,TProductWarehouse as y,TShopPoint as z

但是当其中一个表格没有任何记录时 - 每个字段的结果都是NULL

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您的查询存在一些问题。你基本上是做CROSS JOIN。因此,当一个表具有零行时,不仅中间结果集中将存在零行,而且当任何表具有多个行时,还将存在大量重复数据。这将导致第一种情况下出现空值,第二种情况出现错误结果。

您的查询将按预期工作的唯一情况是所有3个表只有一行。

要拥有你想要的东西,你需要3个独立的子查询,然后将它们组合成一个:

SELECT 
    COALESCE( (SELECT SUM(area)  FROM TEquipWarehouse), 0
            ) AS EquipmentSpace
  , COALESCE( (SELECT SUM(area)  FROM TProductWarehouse), 0 
            ) AS ProductSpace,
  , COALESCE( (SELECT SUM(area)  FROM TShopPoint), 0 
            ) AS ShoppointSpace
 ;

当表没有行时,COALESCE() fubction用于将NULL转换为0.

答案 1 :(得分:0)

如果没有可用值,请使用ISNULL替换值:

select sum(ISNULL(x.area,0)) as EquipmentSpace,sum(ISNULL(y.area,0)) as ProductSpace,sum(ISNULL(z.area,0)) as ShoppointSpace
from TEquipWarehouse as x,TProductWarehouse as y,TShopPoint as z

在这种情况下,如果某个值不存在,则将其替换为0以用于SUM。