У меня был интересный разговор с некоторыми коллегами о том, как решить следующую проблему.Предположим, у меня есть таблица со следующими столбцами:
foo_1,foo_2, foo_3, field_etc,
Score1, Score2, Score3, Score4, Score5,
MoreFields, MoreScores, EvenMoreScores
Мне нужно создать запрос, который возвращает следующее:
foo_1, foo_2, foo_3, field_etc, MaxScore
Где MaxScore - максимальное значение между Score1, Score2,Score3, Score4, Score5
То, что у нас есть, выглядит примерно так:
SELECT
foo_1, foo_2, foo_3, field_etc,
(
SELECT MAX(foo) as Something
FROM
(
SELECT SomeTable.Score1 AS foo
UNION ALL
SELECT SomeTable.Score2
UNION ALL
SELECT SomeTable.Score3
UNION ALL
SELECT SomeTable.Score4
UNION ALL
SELECT SomeTable.Score5
) AS x
) AS MaxScore
FROM
SomeTable
Я чувствую, что должен быть более чистый способ сделать это, но мы не нашли его.Мы избегаем очевидного решения UDF по соображениям производительности.
Было бы замечательно, если бы в tsql была какая-то функция диапазона, поэтому я мог бы сделать:
SELECT
foo_1, foo_2, foo_3, field_etc, MAX(Score1, Score2, Score3, Score4, Score5) as MaxScore
FROM
SomeTable
В идеале базовая таблица была бынормализуется, и это не будет проблемой, но у меня нет возможности изменить это здесь.