В некоторых процедурных расширениях языка SQL уже есть готовые функции GREATEST/LEAST, например PL/SQL, для вычисления максимального/минимального значения, причем входные параметры это набор значений, перечисленных через запятую (не путать с функцией MAX/MIN с единственным входным параметром - столбцом). К сожалению T-SQL не входит в число таких процедурных расширений. Однако не все так плохо как кажется на первый взгляд. Как говорится выход есть всегда. Итак, пусть у нас есть некая таблица с тремя полями
типа integer и в ней содержаться некоторые данные:
типа integer и в ней содержаться некоторые данные:
* This source code was highlighted with Source Code Highlighter.
select *
into #table
from
(
select 1 as col1,2 as col2,3 as col3 union all
select 3,5,4 union all
select 7,0,1 union all
select 1,2,3 union all
select 3,2,5 union all
select 1,5,7
) t
Пусть теперь нам необходимо вывести максимальное значение по имеющимся полям для каждой строки, т.е. результат должен быть следующим:
А вот собственно и код, с помощью которого мы получим такой результат:
select
col1
,col2
,col3
,(select max(NewColumn) from (values (col1),(col2),(col3)) NewTable(NewColumn)) as maximum
from #table
При вычислении максимума мы использовали табличный конструктор, получив на выходе таблицу NewTable. В скобках после названия таблицы мы должны указать название столбцов, в данном примере у нас один - NewColumn, со значениями указанными после ключевого слова values.
Данный подход работает начиная с версии MS SQL Server 2008. Для более ранних версий можно использовать CASE (при работе с небольшим количеством столбцов) или конструкцию с UNION. Также кроме функции MAX можно использовать и другие агрегатные функции.
Комментариев нет:
Отправить комментарий