Как работать с подзапросом в View? - PullRequest
0 голосов
/ 12 сентября 2011

Мне нужно создать Просмотр для этого Запрос , , разрешающий изменение m.arq_data и m2.arq_data значения, когда выбор использует это Просмотр , например:

select * FROM the_view WHERE m.arq_data = X AND m2.arq_data = Y

Вот мой текущий запрос:

SELECT distinct(p.num_processo),p.num_proc_jud,a.assunto,su.subassunto,ma.Materia,u.Unidade ,M.COD_UNIDADE as cod_serv ,u.Unidade as servidor  ,' '  as serv_ativo,
'  '  as data_vinc ,' '  as  V_ativo, M.motivo,M.data_movimentacao as data_mov_distr ,
(select max(m2.arq_data)  from movimentacao m2 where  m2.arq_data 
BETWEEN '2011-08-01 00:00:00'AND '2011-08-31 23:00:00' and m2.num_processo =
  p.num_processo) as Data_Arq_Desarq , status = 'A'

--pra view
, M.arq_data

FROM processo p 
INNER JOIN assunto a ON a.cod_assunto  = p.cod_assunto  
INNER JOIN subassunto su ON su.cod_subassunto  = p.cod_subassunto
LEFT  JOIN materia ma ON ma.cod_materia  = p.cod_materia 
inner JOIN movimentacao M on M.num_processo = p.num_processo
INNER JOIN Unidade u ON u.cod_unidade  = M.COD_UNIDADE  
where 
not exists(select * from anexos a where a.num_proc_anexo = p.num_processo and a.ativo = 1) 
and not exists(select * from movimentacao m1 where m1.num_movimentacao= M.num_movimentacao and m1.motivo = 10 and m1.arquivado = 0) 
and ( not exists (select  * from distrib_vincjud  d2 where d2.num_processo = p.num_processo) 
or  p.num_processo in  (select  d3.num_processo from distrib_vincjud  d3  
                         where d3.num_processo = p.num_processo 
                         and d3.cod_servidor not in(select cod_servidor from servidor)
                         and d3.id_vinc in (select  max(d4.id_vinc) from distrib_vincjud d4 
                  where d4.num_processo = d3.num_processo and d4.data_vinc <= M.arq_data )))
and M.COD_UNIDADE in (select M.COD_UNIDADE   from movimentacao m2 where 
(m2.cod_ORIGEM_MOV = '26000181' or m2.cod_ORIGEM_MOV = '2600000X')and m2.num_processo = p.num_processo)
and p.tipo = 'J'
and  M.arq_data  >= '2011-08-01 00:00:00'AND M.arq_data  <='2011-08-31 23:00:00'

Ответы [ 2 ]

1 голос
/ 12 сентября 2011

Если вы говорите, что хотите настроить свое представление для работы с изменением дат для таких условий, как m2.arq_data BETWEEN '2011-08-01 00:00:00'AND '2011-08-31 23:00:00', то это зависит от ваших требований.

Например, если этот диапазон дат всегда будет between today and 31 days from now, вы можете изменить эту строку на что-то вроде этого:

m2.arq_data BETWEEN GetDate() AND DATEADD (dd, 31, GetDate())

Если диапазон дат не является чем-то довольно простым, который может быть определен в общем случае с помощью SQL, то вы можете рассмотреть возможность использования хранимого процесса или udf и передачи ему параметров даты.

1 голос
/ 12 сентября 2011

Просмотр не может принимать параметры. Вместо этого реализуйте его как табличный udf (или хранимую процедуру).

...