Заменить нулевые значения по умолчанию, возвращаемые слева
У меня есть запрос 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 по умолчанию были равны нулю, если это возможно.
Ответы
Ответ 1
Это так же просто, как
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'
Ответ 2
В случае MySQL
или SQLite
правильным ключевым словом является IFNULL
(не ISNULL
).
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'
Ответ 3
MySQL
COALESCE(field, 'default')
Например:
SELECT
t.id,
COALESCE(d.field, 'default')
FROM
test t
LEFT JOIN
detail d ON t.id = d.item
Также вы можете использовать несколько столбцов для проверки их NULL
с помощью функции COALESCE.
Например:
mysql> SELECT COALESCE(NULL, 1, NULL);
-> 1
mysql> SELECT COALESCE(0, 1, NULL);
-> 0
mysql> SELECT COALESCE(NULL, NULL, NULL);
-> NULL