2

参加しようとしているテーブルが 2 つありSQL Serverます。表 1 は のリストでsalesId、表 2 は による月ごとの平均売上のリストです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結果を一時テーブルに送信してから を に変換するという 2 段階のプロセスでこれが行われた例をいくつか見てきましたが、これを01 段階で行う方法があるかどうか興味がありました。

その理由は、ほとんどが無知によるものです。一時テーブルが (ディスク内またはディスク上で) どのように処理されるか、およびこれが大きなデータ セットであり、複数のまたはディスク スペースを占有RAMする可能性があるため、それらがどのくらいのスペースを占有するかはわかりません。GBRAM

任意の提案をいただければ幸いです。

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は、null ではない最初のパラメーターを返します。あなたの場合、t2.AvgMnthSalesNULLでない限り戻ります。その時点で、2番目のパラメーターが返されます: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

COALESCEまたはを使用できますIFNULL

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

実際に値の結果が必要ない場合は、 の代わりに を使用します。NULLINNER JOINLEFT JOIN

于 2012-09-10T17:50:35.527 に答える