TSQL может это сделать, но это требует небольшой подготовки ...
Во-первых, вам нужна функция:(он принимает строку целых чисел с разделителями-запятыми и возвращает наибольшее целое число)
CREATE Function [dbo].[GreatestInt]
( @Array varchar(max) )
Returns int As
BEGIN
DECLARE @end Int
DECLARE @start Int
DECLARE @tbl_int Table (myInt Int)
DECLARE @return Int
SET @Array = @Array + ','
SET @start=1
SET @end=1
WHILE @end<Len(@Array)
BEGIN
SET @end = CharIndex(',', @Array, @end)
INSERT INTO @tbl_int
SELECT
Cast(Substring(@Array, @start, @end-@start) As Int)
SET @start=@end+1
SET @end = @end+1
END
SET @return = (SELECT MAX(myInt) FROM @tbl_int)
RETURN @return
END
И затем для создания строки целых чисел (это часть, в которой TSQL не очень хорош):(в SELECT)
stuff(
stuff([num5], 1, 0,',')
,1,0,
stuff(
stuff([num4], 1, 0,',')
,1,0,
stuff(
stuff([num3], 1, 0,',')
,1,0,
stuff(
stuff([num2], 1, 0,',')
,1,0,
[num1]
)
)
)
)
Итак, чтобы использовать функцию:
SELECT
id,
dbo.GreatestInt( stuff(
stuff([num5], 1, 0,',')
,1,0,
stuff(
stuff([num4], 1, 0,',')
,1,0,
stuff(
stuff([num3], 1, 0,',')
,1,0,
stuff(
stuff([num2], 1, 0,',')
,1,0,
[num1]
)
)
)
)
)
FROM
myTable
Причина, по которой я сделал это так, а не то, как @mikael в своем ответе (который я+1, потому что он отвечает на ваш вопрос), заключается в том, что этот подход будет работать на любом количестве полей, а не только на 5. Но, честно говоря, у TSQL есть место для улучшения - им действительно нужна версия plsql для tsqlнаибольшие / наименьшие функции.Ну да ладно ...