我有这样的看法:
CREATE VIEW [dbo].[vwRequisitosPersonaMensualesContadores_prueba]
WITH SCHEMABINDING
AS
select
RequisitoId,
ContratistaId,
Requisito,
PeriodoId,
Especial,
Tipo,
ObjectoAplicacion,
TipoCarga,
CargaMasiva,
max(CantidadSinPresentar) - isnull(sum(case when CantidadPresentadosAceptados > 0 then 1 else 0 end), 0) as CantidadSinPresentar,
isnull(sum(case when CantidadPresentadosPendientes > 0 then 1 else 0 end), 0) as CantidadPresentadosPendientes,
isnull(sum(case when CantidadAceptados > 0 then 1 else 0 end), 0) as CantidadAceptados,
isnull(sum(case when CantidadRechazados > 0 then 1 else 0 end), 0) as CantidadRechazados,
isnull(sum(case when CantidadPresentadosAceptados > 0 then 1 else 0 end), 0) as CantidadPresentadosAceptados
from
(
select
RequisitoId,
ContratistaId,
Requisito,
PeriodoId,
Especial,
Tipo,
ObjectoAplicacion,
TipoCarga,
CargaMasiva,
count(*) as 'CantidadSinPresentar'
from (
select
rpp.personaid as 'IdRecurso',
r.Id AS 'RequisitoId',
p.id as 'PeriodoId',
per.contratistaid as 'ContratistaId',
r.Descripcion as 'Requisito',
r.Especial AS 'Especial',
r.Tipo AS 'Tipo',
r.ObjetoAplicacion AS 'ObjectoAplicacion',
r.IdTipoCarga as 'TipoCarga',
r.PresentacionMasiva as 'CargaMasiva',
rpp.PeriodoEvaluacionId
from dbo.requisitoperiodopersona rpp
inner join personas per on per.Id = rpp.PersonaId
inner join requisitos r on r.Id = rpp.RequisitoId
inner join periodos p on p.Id = rpp.PeriodoId
inner join periodos p2 on p2.Id = rpp.PeriodoEvaluacionId
where p2.Cerrado = 0
and rpp.Evaluacion in (1,3)
and r.Tipo = 1
group by
rpp.personaid,
r.Id,
p.Id,
per.contratistaid,
r.Descripcion,
r.Especial,
r.tipo,
r.ObjetoAplicacion,
r.IdTipoCarga,
r.PresentacionMasiva,
rpp.PeriodoEvaluacionId
) as Personas
group by
RequisitoId,
ContratistaId,
Requisito,
PeriodoId,
Especial,
Tipo,
ObjectoAplicacion,
TipoCarga,
CargaMasiva
) RequisitosPersonas
left join
(
select
case when d.idEstado = 'PRE' then count(d.idEstado) else 0 end as CantidadPresentadosPendientes,
case when d.idEstado = 'REV' then count(d.idEstado) else 0 end as CantidadAceptados,
case when d.idEstado = 'REC' then count(d.idEstado) else 0 end as CantidadRechazados,
case when d.idEstado in ('PRE', 'REV') then count(d.idEstado) else 0 end as CantidadPresentadosAceptados,
d.idRequisito
from dbo.RequisitoPeriodoPersona rpp
inner join Periodos pe on pe.Id = rpp.PeriodoId
inner join Periodos p2 on p2.Id = rpp.PeriodoEvaluacionId
inner join Documentos d on d.idRequisito = rpp.RequisitoId
inner join documentosPersona dp on d.idDocumento = dp.idDocumento and rpp.PersonaId = dp.idPersona
where
d.ultimapresentacion = 1
and d.idestado in ('pre', 'rev', 'rec')
and pe.cerrado = 0
group by
dp.idPersona,
d.idEstado,
d.idRequisito
) TotalesPersona on TotalesPersona.idRequisito = RequisitosPersonas.RequisitoId
group by
RequisitoId,
ContratistaId,
Requisito,
PeriodoId,
Especial,
Tipo,
ObjectoAplicacion,
TipoCarga,
CargaMasiva
我得到这个错误:
Msg 4512, Level 16, State 3, Procedure vwRequisitosPersonaMensualesContadores_prueba, Line 7 [Batch Start Line 11]
Cannot schema bind view 'dbo.vwRequisitosPersonaMensualesContadores_prueba' because name 'personas' is invalid for schema binding. Names must be in two-part format and an object cannot reference itself.
我需要在视图上创建一个索引并使用“WITH SCHEMABINDING”,但我在其中一个 SELECT 的别名中出现错误