Минус вопроса о временной стоимости?

Использование SQL Server 2000

запрос

Select id, CONVERT(char(8), CASE WHEN DateAdd(Day, - DateDiff(Day, 0, OutTime), OutTime) > Normal_Outtime THEN Cast(Normal_Outtime AS datetime) ELSE DateAdd(Day, - DateDiff(Day, 0, OutTime), OutTime) END - CASE WHEN DateAdd(Day, - DateDiff(Day, 0, InTime), InTime) < Normal_Intime THEN Cast(Normal_Intime AS datetime) ELSE DateAdd(Day, - DateDiff(Day, 0, InTime), InTime) END - cast(totalLunchtime AS datetime), 8) ELSE '00:00:00' END AS WorkedTime
from table

Из приведенного выше запроса, выполнение outtime - intime - totallunchtime

типы данных столбца - varchar

Пример

Id  |Intime   |Outtime  |totallunchtime

001 |09:00:00 |21:00:00 |01:00:00
002 |07:00:00 |07:30:00 |01:00:00
003 |00:00:00 |00:00:00 |01:00:00

WorkedTime означает (outtime - Intime - totalLunchtime)

Получение такого вывода

id  |workedtime

001 |11:00:00
002 |23:30:00 
003 |23:00:00

Только проблема totalallunchtime, в то время как минус 00:00:00 он дает 23:00:00, а также для personid 002, который дает 23:30:00, он должен давать только 00:30:00.

Ожидаемый результат

id  |workedtime

001 |11:00:00
002 |00:23:00
003 |00:00:00

so on...,

Нужна помощь по запросу


person Gopal    schedule 02.10.2009    source источник
comment
Дубликат stackoverflow.com/questions/1509508/how-to-make-total   -  person D'Arcy Rittich    schedule 02.10.2009
comment
Орбман. Это для Минуса проблема времени. Это другое, прочтите вопрос еще раз   -  person Gopal    schedule 02.10.2009
comment
@Gopal, а как насчет всех ваших других вопросов, которые вы задавали за последние несколько дней? у вас было много вопросов, чтобы прояснить то, что вы спрашиваете, вы когда-нибудь разъясняли эти вопросы или даже принимали какой-либо из этих ответов?   -  person KM.    schedule 02.10.2009
comment
Концепция в точности такая же, как и в другом вопросе - проанализировать временную строку, произвести с ней арифметические операции, преобразовать обратно в временную строку. Вам нужно научиться ловить рыбу ...   -  person D'Arcy Rittich    schedule 02.10.2009
comment
@OrbMan, но ведь брать подачу с рыбой намного проще!   -  person KM.    schedule 02.10.2009


Ответы (1)


Что-то вроде этого поможет?

declare @a datetime
declare @b datetime
declare @c datetime

set @a = '09:00:00'
set @b = '17:00:00'
set @c = '01:00:00'

select @b - @a - case when datediff(n, @a, @b) < 60 then '00:00:00' else @c end

Если вам нужно больше, то вам необходимо уточнить, при каких условиях следует учитывать столбец totalallunchtime.

person Chris J    schedule 02.10.2009
comment
@Chris J сказал Если вам нужно больше, тогда вам нужно уточнить ..., ха! см. мой комментарий к вопросу ... - person KM.; 02.10.2009