0

当我在查询窗口中执行此查询时,它工作正常,但如果我使用此查询创建视图,它会抛出错误消息"multi- part identifier 'TP.IndexYear'无法绑定”。

询问:

SELECT ISNULL(TP.Outline, 0) AS Outline, ISNULL(TP.OutlineInline, 0) - ISNULL(TP.Outline, 0) AS Inline FROM (
   SELECT
        COUNT(DISTINCT TP.PltrhPositionID) AS OutlineInline,
        SUM(CASE WHEN YEAR(PPH.EndDate) = 9999 OR (PPH.EndDate >= '12/31/' + CONVERT(VARCHAR, TP.IndexYear)) THEN 1 ELSE 0 END) AS Outline
    FROM (
        SELECT
            PH.PltrhPositionID,
            CASE 
                WHEN PH.Plan1 IS NULL OR PH.Plan1 = '' THEN 0 + PP.StartYear
                WHEN PH.Plan2 IS NULL OR PH.Plan2 = '' THEN 1 + PP.StartYear
                WHEN PH.Plan3 IS NULL OR PH.Plan3 = '' THEN 2 + PP.StartYear
                WHEN PH.Plan4 IS NULL OR PH.Plan4 = '' THEN 3 + PP.StartYear
                WHEN PH.Plan5 IS NULL OR PH.Plan5 = '' THEN 4 + PP.StartYear
                WHEN PH.Plan6 IS NULL OR PH.Plan6 = '' THEN 5 + PP.StartYear
                ELSE 6 + PP.StartYear
            END AS IndexYear
        FROM OdpTools_PltrhPosition PH
        LEFT JOIN OdpTools_PltrhPeriod PP ON PP.ID = PH.PltrhPeriodID
        WHERE PH.Closed = 0
    ) AS TP
    LEFT JOIN OdpTools_CurrentPlanPositionHistory PPH ON PPH.PltrhPositionID = TP.PltrhPositionID
) TP

谁能解释这个奇怪的谜团?

提前致谢,

布赖恩

4

1 回答 1

0

我按照@AaronBertrand 的建议在不同级别删除具有相同别名的表,并且它可以工作。

SELECT ISNULL(TPA.Outline, 0) AS Outline, ISNULL(TPA.OutlineInline, 0) - ISNULL(TPA.Outline, 0) AS Inline FROM (
   SELECT
        COUNT(DISTINCT TP.PltrhPositionID) AS OutlineInline,
        SUM(CASE WHEN YEAR(PPH.EndDate) = 9999 OR (PPH.EndDate >= '12/31/' + CONVERT(VARCHAR, TP.IndexYear)) THEN 1 ELSE 0 END) AS Outline
    FROM (
        SELECT
            PH.PltrhPositionID,
            CASE 
                WHEN PH.Plan1 IS NULL OR PH.Plan1 = '' THEN 0 + PP.StartYear
                WHEN PH.Plan2 IS NULL OR PH.Plan2 = '' THEN 1 + PP.StartYear
                WHEN PH.Plan3 IS NULL OR PH.Plan3 = '' THEN 2 + PP.StartYear
                WHEN PH.Plan4 IS NULL OR PH.Plan4 = '' THEN 3 + PP.StartYear
                WHEN PH.Plan5 IS NULL OR PH.Plan5 = '' THEN 4 + PP.StartYear
                WHEN PH.Plan6 IS NULL OR PH.Plan6 = '' THEN 5 + PP.StartYear
                ELSE 6 + PP.StartYear
            END AS IndexYear
        FROM OdpTools_PltrhPosition PH
        LEFT JOIN OdpTools_PltrhPeriod PP ON PP.ID = PH.PltrhPeriodID
        WHERE PH.Closed = 0
    ) AS TP
    LEFT JOIN OdpTools_CurrentPlanPositionHistory PPH ON PPH.PltrhPositionID = TP.PltrhPositionID
) TPA //Change TP to TPA
于 2013-11-14T06:30:09.177 回答