使用SQL case语句更改每个员工和每个日期的输出

时间:2018-08-16 15:59:05

标签: sql sql-server case

使用下表如何在最小值时将值更改为“ in”,在最大值时将值更改为“ out”,如果第一个值将中间值更改为“ leave out”在'in'之后,但它不是最大值,如果不是最大值,它之后的记录也将保留。

code val       date                     val2
001 1           2018-08-08 00:00:00.000 NULL
001 2           2018-08-08 00:00:00.000 NULL
001 3           2018-08-08 00:00:00.000 NULL
001 4           2018-08-08 00:00:00.000 NULL
001 1           2018-08-09 00:00:00.000 NULL
001 2           2018-08-09 00:00:00.000 NULL
002 1           2018-08-09 00:00:00.000 NULL
002 2           2018-08-09 00:00:00.000 NULL
002 3           2018-08-09 00:00:00.000 NULL
002 4           2018-08-09 00:00:00.000 NULL
003 1           2018-08-09 00:00:00.000 NULL
003 2           2018-08-09 00:00:00.000 NULL

我设法更改了最小值,但最大值仅按日期更改,并记下了员工代码。

1 个答案:

答案 0 :(得分:0)

这是您想要的吗?

select t.*,
       (case when val = 1 then 'in'
             when val = max(val) over (partition by code) then 'out'
             else 'leave out'
        end)
from t;

如果是这样,则可以轻松地将逻辑合并到更新中。