2009-11-02 10 views
64

Mam kwerendę Microsoft SQL Server 2008, która zwraca dane z trzech tabel przy użyciu lewego zewnętrznego sprzężenia. Wiele razy nie ma danych w drugiej i trzeciej tabeli, a więc otrzymuję wartość null, która moim zdaniem jest domyślna dla lewego sprzężenia zewnętrznego. Czy istnieje sposób na zastąpienie wartości domyślnych w instrukcji select? Mam obejście, które mogę wybrać w zmiennej tabeli, ale wydaje się trochę brudny.Zastąp domyślne wartości zerowe zwrócone z lewego zewnętrznego łączenia

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' 

Chciałbym, aby ilość i cena standardowa były domyślnie zerowe, jeśli to możliwe.

Odpowiedz

102

To tak proste, jak

IsNull(FieldName, 0) 

Albo pełniej:

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

Wiedziałem, że to musi być łatwe, ale z jakiegoś powodu zostałem zablokowany, jak to zrobić. Dzięki. –

+29

Jeśli jest to MySQL, IsNull należy zastąpić przez "IFNULL". Dzięki. – Dhanushka

+10

W PostgreSQL wygląda na ["COALESCE"] (http://www.postgresql.org/docs/9.3/static/functions-conditional.html). W przypadku MySQL strona podręcznika znajduje się tutaj: ["IFNULL"] (http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html). Nie jestem pewien co do standardu. –

Powiązane problemy