我必须自定义查询的特定列值。我有四种情况

  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

10-08 15:23