1

我有三张桌子,我有字段 - 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.

如何解决这个问题呢?

4

2 回答 2

2

您的查询有几个问题。你本质上是在做一个CROSS JOIN. 因此,不仅当一个表的行数为零时,中间结果集中的行数为零,而且当任何表的行数超过一时,也会出现大量重复数据。这将在第一种情况下导致 Null 结果,在第二种情况下导致错误结果。

您的查询将按预期工作的唯一情况是所有 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()函数用于将 转换为 0。NULL

于 2012-12-02T18:36:02.743 回答
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

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

于 2012-12-02T18:33:48.737 回答