2009-11-02 3 views
64

У меня есть запрос Microsoft SQL Server 2008, который возвращает данные из трех таблиц, используя левое внешнее соединение. Много раз, нет данных во второй и третьей таблицах, и поэтому я получаю нуль, который, по моему мнению, является значением по умолчанию для внешнего внешнего соединения. Есть ли способ заменить значения по умолчанию в инструкции select? У меня есть обходной путь в том, что я могу выбрать переменную таблицы, но он чувствует себя немного грязным.Заменить нулевые значения по умолчанию, возвращаемые слева.

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' 

Я хотел бы, чтобы количество и RegularPrice по умолчанию были равны нулю, если это возможно.

ответ

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' 
Смежные вопросы