В SQL Server 2012 или более поздней версии вы можете использовать комбинацию IIF
и ISNULL
(или COALESCE
), чтобы получить максимум 2 значения.
Даже когда 1 из них имеет значение NULL.
IIF(col1 >= col2, col1, ISNULL(col2, col1))
Или, если вы хотите, чтобы он возвращал 0, когда оба равны NULL
IIF(col1 >= col2, col1, COALESCE(col2, col1, 0))
Пример фрагмента:
-- use table variable for testing purposes
declare @Order table
(
OrderId int primary key identity(1,1),
NegotiatedPrice decimal(10,2),
SuggestedPrice decimal(10,2)
);
-- Sample data
insert into @Order (NegotiatedPrice, SuggestedPrice) values
(0, 1),
(2, 1),
(3, null),
(null, 4);
-- Query
SELECT
o.OrderId, o.NegotiatedPrice, o.SuggestedPrice,
IIF(o.NegotiatedPrice >= o.SuggestedPrice, o.NegotiatedPrice, ISNULL(o.SuggestedPrice, o.NegotiatedPrice)) AS MaxPrice
FROM @Order o
Результат:
OrderId NegotiatedPrice SuggestedPrice MaxPrice
1 0,00 1,00 1,00
2 2,00 1,00 2,00
3 3,00 NULL 3,00
4 NULL 4,00 4,00