我有三张桌子,我有场 - 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
。
如何解决这个问题?
答案 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。