2009-11-02 1 views
64

左外部結合を使用して3つのテーブルからデータを返すMicrosoft SQL Server 2008クエリがあります。何度も、2番目と3番目のテーブルにデータが存在しないので、私は左外部結合のデフォルトであると考えるnullを取得します。 select文のデフォルト値を置き換える方法はありますか?テーブル変数を選択できるという回避策がありますが、少し汚れているようです。左外部から返された既定のNULL値を置換します。

SELECT iar.Description, iai.Quantity, iai.Quantity * rpl.RegularPrice as 'Retail', 
iar.Compliance FROM InventoryAdjustmentReason iar 
LEFT OUTER JOIN InventoryAdjustmentItem iai on (iar.Id = iai.InventoryAdjustmentReasonId) 
LEFT OUTER JOIN Item i on (i.Id = iai.ItemId) 
LEFT OUTER JOIN ReportPriceLookup rpl on (rpl.SkuNumber = i.SkuNo) 
WHERE iar.StoreUse = 'yes' 

可能であれば、QuantityとRegularPriceのデフォルト値は0です。

答えて

102

完全
IsNull(FieldName, 0) 

以上のように簡単です:

SELECT iar.Description, 
    ISNULL(iai.Quantity,0) as Quantity, 
    ISNULL(iai.Quantity * rpl.RegularPrice,0) as 'Retail', 
    iar.Compliance 
FROM InventoryAdjustmentReason iar 
LEFT OUTER JOIN InventoryAdjustmentItem iai on (iar.Id = iai.InventoryAdjustmentReasonId) 
LEFT OUTER JOIN Item i on (i.Id = iai.ItemId) 
LEFT OUTER JOIN ReportPriceLookup rpl on (rpl.SkuNumber = i.SkuNo) 
WHERE iar.StoreUse = 'yes' 
+3

私はそれが簡単でなければならないと知っていましたが、なんらかの理由で、私はそれをどうやってやるのかブロックされました。ありがとう。 –

+29

MySQLの場合は、IsNullを 'IFNULL'に置き換える必要があります。ありがとう。 – Dhanushka

+10

PostgreSQLでは、["COALESCE"](http://www.postgresql.org/docs/9.3/static/functions-conditional.html)のようです。 MySQLのマニュアルページは、["IFNULL"](http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html)です。標準についてはわからない –

0

ない彼のISNULL、このIFNULLでに。

SELECT iar.Description, 
     IFNULL(iai.Quantity,0) as Quantity, 
     IFNULL(iai.Quantity * rpl.RegularPrice,0) as 'Retail', 
     iar.Compliance 
    FROM InventoryAdjustmentReason iar 
    LEFT OUTER JOIN InventoryAdjustmentItem iai on (iar.Id = iai.InventoryAdjustmentReasonId) 
    LEFT OUTER JOIN Item i on (i.Id = iai.ItemId) 
    LEFT OUTER JOIN ReportPriceLookup rpl on (rpl.SkuNumber = i.SkuNo) 
WHERE iar.StoreUse = 'yes' 
関連する問題