1

フィールドを持っているテーブルが 3 つあります - area。そこで、すべてのテーブルの面積の合計を見つけて、1 つのビューに表示することにしました。

クエリを作成しました

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

ただし、テーブルの 1 つにレコードがない場合、すべてのフィールドの結果はNULL.

この問題を解決するには?

4

2 に答える 2

2

クエリにはいくつかの問題があります。あなたは本質的にやっていCROSS JOINます。したがって、1 つのテーブルにゼロ行がある場合、中間結果セットにゼロ行があるだけでなく、いずれかのテーブルに複数の行がある場合、多くの重複データが存在します。これにより、最初のケースでは Null が返され、2 番目のケースでは誤った結果が返されます。

クエリが期待どおりに機能する唯一のケースは、3 つのテーブルすべてに正確に 1 つの行がある場合です。

必要なものを得るには、3 つの個別のサブクエリが必要であり、それらを 1 つに結合します。

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
 ;

テーブルに行がない場合、関数を使用してを 0COALESCE()に変換します。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 に答える