2014-01-19 3 views
0

У меня есть один запрос, этот запрос будет отображаться на основе дня, в который день будет отображаться в зависимости от недели, на которой он будет отображаться.Запрос должен быть изменен

В этой таблице часов моих даты начала и конца начинается от 2014-01-06 2014-01-12 одна недели ..

для например:

declare @Hours as Table (EmpId Int, Monday Time, Tuesday Time, Wednesday Time, 
    Thursday Time, Friday Time, Saturday Time, Sunday Time, StartDate Date, EndDate Date); 
insert into @Hours 
    (EmpId, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday, StartDate, EndDate) 
    values 
    (1, '08:00', '00:00', '00:00', '00:00', '00:00', '00:00', '00:00', '2014-01-06 00:00:00.000', '2014-01-12 00:00:00.000'); 
select * from @Hours; 


with Week as (
    -- Build a table of all of the dates in the work week. 
    select StartDate as WorkDate, EndDate 
    from @Hours 
    union all 
    select DateAdd(day, 1, WorkDate), EndDate 
    from Week 
    where WorkDate < EndDate), 
    DaysHours as (
    -- Build a table of the hours assigned to each date. 
    select EmpId, 
    case DatePart(weekday, W.WorkDate) 
     when 1 then H.Monday 
     when 2 then H.Tuesday 
     when 3 then H.Wednesday 
     when 4 then H.Thursday 
     when 5 then H.Friday 
     when 6 then H.Saturday 
     when 7 then H.Sunday 
     end as Hours, 
    WorkDate as StartDate, WorkDate as EndDate 
    from Week as W inner join 
     @Hours as H on H.StartDate <= W.WorkDate and W.WorkDate <= H.EndDate) 
    -- Output the non-zero hours. 
    select EmpId, Hours,StartDate as StartDate, EndDate 
    from DaysHours 
    where Hours <> Cast('00:00' as Time); 

нужен выход, как это:

EmpId  Hours   StartDate EndDate 
----------- ---------------- ---------- ---------- 
1   08:00:00.0000000 2014-01-06 2014-01-06 

, потому что понедельник только мы имеем value.but мой выход, как этот

EmpId  Hours   StartDate EndDate 
----------- ---------------- ---------- ---------- 
1   08:00:00.0000000 2014-01-12 2014-01-12 

он должен работать в зависимости от того, в какой день это значение.

Может ли любой орган изменить этот запрос сам.

Спасибо,

+0

это не выглядит как MySQL. Вы пытаетесь преобразовать свой существующий sql в mysql? –

+0

извините, что это sql только я изменю тег –

ответ

0

После исполнения получил

EmpId Hours    StartDate EndDate 
1  08:00:00.0000000 2014-01-06 2014-01-06 

MS SQL Server 2008 R2

+0

выберите EmpId, Hours, StartDate как StartDate, EndDate от DaysHours где Часы <> Cast ('00: 00 'as Time); проверьте этот результат, вы не получите 2014-01-06 2014-01-06 –

0

Попробуйте этот запрос:

SELECT x.EmpId, ca.Hours, ca.CurrentDate AS StartDate, ca.CurrentDate AS EndDate 
FROM @Hours x 
CROSS APPLY 
(
    SELECT y.Hours, DATEADD(DAY, y.NumOfDays, x.StartDate) 
    FROM 
    (
     SELECT x.Monday, 0 
     UNION ALL SELECT x.Tuesday, 1 
     UNION ALL SELECT x.Wednesday, 2 
     UNION ALL SELECT x.Thursday, 3 
     UNION ALL SELECT x.Friday, 4 
     UNION ALL SELECT x.Saturday, 5 
     UNION ALL SELECT x.Sunday, 6 
    ) y (Hours, NumOfDays) 
    WHERE y.Hours <> '00:00:00.0000000' 
) ca (Hours, CurrentDate); 
Смежные вопросы