首页 > 解决方案 > 如何使用 unpivot 函数在其他列中查找最小值来忽略字符串值

问题描述

我有一张看起来像这样的桌子

在此处输入图像描述

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不接受。谢谢

标签: sqlsql-servertsqlpivotunpivot

解决方案


只是另一种选择是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

退货

ID  TheMin
1   1000
2   2000

推荐阅读