Я бы использовал оператор case:
CASE
WHEN condition THEN trueresult
[...n]
[ELSE elseresult]
END
Начиная с незагроможденного ответа, предположим, что ни одно из значений не равно NULL:
CASE
WHEN ModifiedPrice > GroupPrice AND ModifiedPrice > CustomPrice AND ModifiedPrice > SalePrice THEN ModifiedPrice
WHEN GroupPrice > CustomPrice AND GroupPrice > SalePrice THEN GroupPrice
WHEN CustomPrice > SalePrice THEN CustomPrice
ELSE SalePrice
END
Если какие-либо значения равны NULL, эти условия будут возвращать false, поэтому нам нужно использовать ISNULL, чтобы исправить ситуацию и заменить NULLS большим отрицательным числом или нулем, если вы не ожидаете отрицательных цен. При условии отсутствия отрицательных цен, я буду использовать ноль.
CASE
WHEN ModifiedPrice > ISNULL(GroupPrice, 0) AND ModifiedPrice > ISNULL(CustomPrice, 0) AND ModifiedPrice > ISNULL(SalePrice,0) THEN ModifiedPrice
WHEN GroupPrice > ISNULL(CustomPrice, 0) AND GroupPrice > ISNULL(SalePrice, 0) THEN GroupPrice
WHEN CustomPrice > ISNULL(SalePrice, 0) THEN CustomPrice
ELSE ISNULL(SalePrice, 0)
END
Не красиво, но это будет работать. Если вы выполняете некоторую статистику, чтобы увидеть, какой столбец обычно является наибольшим значением, вы можете изменить запрос, чтобы сначала проверить этот столбец. (Вы не можете просто изменить мои предложения WHEN, как написано, поскольку каждый из них предполагает, что предыдущая цена уже была отклонена. Если бы CustomPrice обычно был самым большим, я бы поменял местами ModifiedPrice и CustomPrice в приведенном выше коде.)