我必须自定义查询的特定列值。我有四种情况
empcode AbsentDays
1 0.00
6 0.50
2 1.00
3 1.50
4 2.00
5 2.50
我的预期产出是
1 0
6 0.5
2 1
3 1.5
4 2
5 2.5
为了做到这一点,我试着写在下面
AbsentDays = case
when AbsentDays = 0.00
then convert(int, AbsentDays)
when AbsentDays >= 1.00
then convert(decimal(10, 1), AbsentDays)
-- when AbsentDays = 0.50
-- then 0.5
end
但是使用这个我不能得到我想要的结果,它正在覆盖其他值。
最佳答案
列只能有一个数据类型。为了以您描述的方式查看不同的情况,您必须使用varchar
/nvarchar
数据类型:
AbsentDays = case
when AbsentDays = floor(AbsentDays)
then convert(nvarchar(max),convert(int, AbsentDays)) -- change to int if no decimal part
else convert(nvarchar(max),convert(decimal(10, 1), AbsentDays)) -- else return one decimal
end