2013-11-02 3 views
0

Доброе утро, я пытаюсь провести динамическую таблицу с некоторыми данными, этот запрос, нарисовать таблицу, в которой есть день, неделя и некоторые данные, которые я хочу рассчитать динамически.Рисовать динамическую таблицу в SQL

Это мой запрос

use Alfri 
;with monthDates 

as 
(
    select DATEADD(month, 0, CONVERT(DATE,'2013-09-09',102)) as d 
      ,DATEPART(week, DATEADD(month, datediff(month, 0, '2013-09-09'),0)) as w, 
      (
       SELECT SUM(
          CASE WHEN arrive_yard IS NOT NULL THEN 
            DATEDIFF(mi, Solicitado, Libre)-DATEDIFF(mi, arrive_yard, leave_yard) 
           ELSE 
            DATEDIFF(mi, Solicitado, Libre) 
          END 
         ) as Tiempo 
       FROM MovimientoHoras 
       WHERE CONVERT(DATE, Solicitado, 102) = '2013-10-11' 
      ) as info 
    union all 
    select DATEADD(day, 1, d) 
      ,DATEPART(week, DATEADD(day, 1, d)) 
      , info 
    from monthDates 
    where d < DATEADD(month, datediff(month, 0, '2013-10-09')+1,-1) 
) 

SELECT * FROM monthDates 

Этот запрос рисовать мне таблицу, как это.

d   |w  |info | 
2013-09-09 | 36 | 2780| 
2013-09-10 | 37 | 2780| 
2013-09-11 | 37 | 2780| 
2013-09-12 | 37 | 2780| 
2013-09-13 | 37 | 2780| 
2013-09-14 | 37 | 2780| 
2013-09-15 | 37 | 2780| 
2013-09-16 | 37 | 2780| 

Но колонка информации не перестраивается динамически, и это моя диленма.

Дело в том, что столбец d вычисляется динамически, и это значение, которое я хочу использовать в запросе столбца info, примерно так: WHERE CONVERT(DATE, Solicitado, 102) = d) as info вместо WHERE CONVERT(DATE, Solicitado, 102) = '2013-10-11') as info где D - это дата, изменяющаяся в каждой строке, пытаясь это просто дать мне ту же данные о '2013-10-11'

что-то, как время, чтобы изменить день, в этом подзапросе

Благодарности

ответ

0

основной подход заключается в разделении той части, которая генерирует дату из той части, которая вычисляет информация для этого дата:

;with monthDates as (
    select 
     cast('20130909' as date) as d, 
     datepart(week, dateadd(month, datediff(month, 0, '2013-09-09'), 0)) as w 
    union all 
    select 
     dateadd(day, 1, d), 
     datepart(week, dateadd(day, 1, d)) 
    from 
     monthDates 
    where 
     d < dateadd(month, datediff(month, 0, '2013-10-09') + 1, -1) 
) 
select 
    m.d, 
    m.w, 
    sum(
     datediff(mi, Solicitado, Libre) 
     - case when arrive_yard is not null then 
       datediff(mi, arrive_yard, leave_yard)  
      else 0 end 
    ) info 
from 
    monthDates m 
     left outer join 
    MovimientoHoras h 
     on cast(Solicitado as date) = m.d 
group by 
    m.d, 
    m.w 

Example SQLFiddle

Смежные вопросы