0

我有这样的看法:

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 的别名中出现错误

4

0 回答 0