MSSQL IF语句的问题

时间:2014-07-02 14:38:51

标签: sql-server sql-server-2008

我在将查询从MySQL转换为MSSQL时遇到问题。我的大多数错误都来自if语句,该语句应该看看我们在某一天剩下多少个工时。它检查该人是否尚未工作或当前正在工作,并添加他们安排的时间或他们离开工作的时间。

Round(Sum(IF(mon_endtime > Curtime(),IF(mon_starttime > Curtime(),mon_duration, (mon_endtime - Curtime()) / 10000), 0)),1) AS hours

mon_信息存储在employee表中。我知道MSSQL没有curtime(),并且我有一个变量来保存它,但我在使用以下代码获取正确数量时遇到问题:

declare @cur_time time;
declare @starttime time;
declare @endtime time;
set @cur_time = CONVERT(time, CURRENT_TIMESTAMP);
select @starttime = tue_starttime from employee;
select @endtime = tue_endtime from employee;
if (@endtime > @cur_time)
begin
    if (@starttime > @cur_time)
    begin
        select sum(tue_duration) as hours from employee
    end
    else begin
        select sum(datediff(hh,@cur_time,tue_endtime)) as hours from employee
    end
end
else begin
    select 0 as hours from employee
    end

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

请尝试使用此CASE语句:

ROUND(
    SUM(
        CASE WHEN (mon_endtime > Curtime())
            THEN 
            CASE WHEN (mon_starttime > Curtime())
                THEN mon_duration
                ELSE ((mon_endtime - Curtime()) / 10000)
            END
            ELSE 0
        END)
    ,1) AS Hours

(格式化,以便我能更好地理解声明!)