如何使用 unpivot 函数在其他列中查找最小值来忽略字符串值

How to ignore string value using unpivot function finding the min value among other columns

我有一个table看起来像这样

目标是在 Limit 列(Limit1、Limit2、Limit3...等)中找到最小值。

为此,我正在使用 UNPIVOT 函数。

但问题是有些值是空字符串。结果,最小值变为空字符串。

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

那么在使用 UNPIVOT 函数时如何忽略字符串值?

我希望我的结果是这样的:

ID  TheMin
1   1000
2   2000

我尝试使用 NULLIFUNPIVOT 不接受。 谢谢

因为你的dataType是string类型,而且有一列包含''

你可以尝试在MINCAST中使用条件聚合函数到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

另一个选项是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