2

我正在尝试限制特定字段,以使它们不超过特定值。

例如,像这样就足够了,我可以指定一个字段不应超过 8:

SELECT (
        cap(t.MondayHrs,8) 
        + cap(t.TuesdayHrs,8)
        + cap(t.WednesdayHrs,8)
        + cap(t.ThursdayHrs,8)
        + cap(t.FridayHrs,8)
       ) as TotalHours

如果MondayHrs = 7,那么它应该作为7 添加到TotalHours。如果MondayHrs = 10,那么它应该作为8(我的上限值)添加到TotalHours

T-SQL 中是否有任何内置的东西可以促进这一点?

4

4 回答 4

6
create function Cap (@Value float,@maxValue float) Returns float 
as
begin
Declare @Result float
if @Value > @maxValue select @Result=@Maxvalue else select @Result=@Value
Return @Result
end;

用法

Select dbo.Cap(1,10),dbo.Cap(11,10)
于 2012-11-14T23:49:12.633 回答
4

尝试...

select least(t.MondayHrs,8) 
    + least(t.TuesdayHrs,8)
    + least(t.WednesdayHrs,8)
    + least(t.ThursdayHrs,8)
    + least(t.FridayHrs,8)
   ) as TotalHours
于 2015-11-25T23:25:39.790 回答
2

另一种想法是使用 CASE。例如:

SELECT ( 
       (CASE WHEN t.MondayHrs > 8 THEN 8 ELSE t.MondayHrs END)
       + (CASE WHEN t.TuesdayHrs > 8 THEN 8 ELSE t.TuesdayHrs END)
) as TotalHours
于 2012-11-14T23:57:31.513 回答
1

您可以为此编写一个函数,例如 MySQL GREATEST

然后你可以做类似的事情

select greatest(some_col, 8) +
       greatest(other_col, 8) + 
       ...
from your_table
于 2012-11-14T23:48:21.203 回答