我有一张看起来像这样的桌子
目标是在列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
我尝试使用NULLIF
,但UNPIVOT
不接受。
谢谢
答案 0 :(得分:2)
另一个选择是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
答案 1 :(得分:1)
因为您的dataType是字符串类型,并且一列包含''
您可以尝试在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
ID TheMin
1 1000
2 2000
注意
如果您仅在其中存储数字,我建议您的列将保存int
而不是varchar
。