Как игнорировать строковое значение, используя функцию unpivot, находя минимальное значение среди других столбцов - PullRequest
0 голосов
/ 30 октября 2018

У меня таблица выглядит вот так

enter image description here

Цель состоит в том, чтобы найти минимальное значение среди столбцов Limit (Limit1, Limit2, Limit3 ... и т. Д.).

Для этого я использую функцию UNPIVOT.

Но проблема в том, что некоторые значения являются пустыми строками. В результате значение min становится пустой строкой.

declare @TempTable2 table (ID int, limit1 varchar(50),limit2 varchar(50),limit3 varchar(50),limit4 varchar(50),limit5 varchar(50) )
insert into @TempTable2 values   (1,'1000','1000','3000',NULL, NULL)
                                ,(2,'2000','4000','3000','', NULL)

--select * from @TempTable2
Select  ID, 
        min(Amount) as TheMin
from @TempTable2
    unpivot (Amount for AmountCol in (Limit1,Limit2,Limit3,Limit4,Limit5)) as unpvt
group by ID

enter image description here

Так как я могу игнорировать строковые значения при использовании функции UNPIVOT?

Я ожидаю, что мой результат будет таким:

ID  TheMin
1   1000
2   2000

Я пытался использовать NULLIF, но UNPIVOT не принимает его. Спасибо

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Просто еще один вариант - NullIf()

Пример

Select  ID, 
        min(nullif(Amount,'')) as TheMin
from @TempTable2
    unpivot (Amount for AmountCol in (Limit1,Limit2,Limit3,Limit4,Limit5)) as unpvt
group by ID

Returns

ID  TheMin
1   1000
2   2000
0 голосов
/ 30 октября 2018

Поскольку ваш тип данных имеет строковый тип, и в одном столбце содержится ''

Вы можете попробовать использовать функцию агрегирования условий в MIN и CAST до int

Select  ID, 
        min(CASE WHEN Amount like '%[0-9]%'  THEN CAST(Amount AS INT)  END) as TheMin
from @TempTable2
    unpivot (Amount for AmountCol in (Limit1,Limit2,Limit3,Limit4,Limit5)) as unpvt
group by ID

sqlfiddle

ID  TheMin
1   1000
2   2000

Примечание

Я бы посоветовал вашим столбцам повернуть для сохранения int вместо varchar, если вы сохраняете в них только номер.

...