如何使用 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
我尝试使用 NULLIF
但 UNPIVOT
不接受。
谢谢
因为你的dataType是string类型,而且有一列包含''
你可以尝试在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
。
另一个选项是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
我有一个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
我尝试使用 NULLIF
但 UNPIVOT
不接受。
谢谢
因为你的dataType是string类型,而且有一列包含''
你可以尝试在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
。
另一个选项是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