0
declare @year int
set @year = 2009

while(year <= 2020)
begin

  SELECT A.dsformfieldvalue                              as Instrumento ,
         AVG(DATEDIFF(day, B.DTSTARTDATE , C.DTENDDATE)) as TempoMedio  ,
         'Jul/2009 a Dez/2009'                           as Periodo
  from       wfflow_form_field_log A
  right join wfflow_execute_task   B on A.codflowexecute = B.codflowexecute
  right join wfflow_execute_task   C on B.codflowexecute = C.codflowexecute
  where A.codflow  in (326, 439)
    and A.codfield =  2498
    and B.codtask  =  7064
    and C.codtask  =  7095
    and CONVERT(CHAR(4), B.DTSTARTDATE, 120) = @year
    and CONVERT(CHAR(4), B.DTSTARTDATE, 100) in ('Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')

  set @year = @year + 1

  group by A.dsformfieldvalue

  union all

end

基本的に私がやろうとしているのは、一連の選択を結合する必要があるため、繰り返されるコードの数を大幅に減らすことです。while ループを試していますが、うまくいきません。入力はありますか?

4

2 に答える 2

2

あなたがやろうとしていることはこれだと思います

select * 
from wfflow_form_field_log A
     right join wfflow_execute_task B on 
          A.codflowexecute = B.codflowexecute
where year(b.dtstartdate) between 2009 and 2020
and month(b.dtstartdate)>=7
and ... -- other filters
于 2013-10-10T18:35:45.967 に答える