内部左连接以获取上一个日期的值

Inner left join to get value on previous date

我正在尝试在以下查询中获取前一个日期 TabDate 的 GR2 值:

    DECLARE @ShN money=STRLOG.dbo.fn_VarValue('ShN') 
    DECLARE @ShNs money=STRLOG.dbo.fn_VarValue('ShNs') 
    DECLARE @ShNN money=STRLOG.dbo.fn_VarValue('ShN')     +STRLOG.dbo.fn_VarValue('ShNs') 
    DECLARE @ShD money=STRLOG.dbo.fn_VarValue('ShD') 

    SELECT sum(
        CASE 
            WHEN ttab.GR2='33' 
            THEN 
                CASE 
                -- Randam ar sekianti diena sventes         
                WHEN tholy.[ID] IS NOT NULL
                THEN @ShN

                ELSE @ShN 
                END
            WHEN ttab.GR2='3' 
            THEN 
                CASE 
                -- Randam ar sekianti diena sventes         
                WHEN tholy.[ID] IS NOT NULL
                THEN @ShNs
                -- Randam ar tai pirma 3-cios pamainos diena
                WHEN tprev.GR2='3'
                THEN @ShNN

                ELSE @ShNs 
                END
            ELSE 
                CASE 
                -- Randam ar sekianti diena sventes         
                WHEN tholy.[ID] IS NOT NULL
                THEN @ShD-60
                ELSE @ShD 
                END
        END
        )/60, 
        ttab.EmplCodeID
        FROM tbl_TabelWHrs          INNER JOIN tbl_Tabel ttab           
             ON tbl_TabelWHrs.TabWHrsID = ttab.TabWHrsID
        LEFT JOIN tbl_Holidays tholy            
             ON [HolidayDate]=DATEADD("DAY",1,[TabDate])
        LEFT JOIN  tbl_Tabel tprev          
             ON ttab.[EmplCodeID]=tprev.[EmplCodeID]            
             AND [ttab.TabDate]=DATEADD("DAY",-1,[tprev.TabDate])
        WHERE (tbl_TabelWHrs.TabMon='2014.12' AND ttab.EmplCodeID='7040023' AND ttab.GR2 is not null)
        GROUP BY ttab.EmplCodeID;

我在执行时得到的是 2 个错误:


Msg 207, Level 16, State 1, Line 47 Invalid column name 'ttab.TabDate'. Msg 207, Level 16, State 1, Line 47 Invalid column name 'tprev.TabDate'.


"LEFT JOIN tbl_Tabel tprev" 有问题。 "AND [ttab.TabDate]=DATEADD("DAY",-1,[tprev.TabDate])" 行的字段出现错误。我在这里做错了什么?

这里的问题是在别名之前使用了 square bracket 并在列名之后结束,所以 [tprev.TabDate] 将被视为一个列,别名在这里被转义。

像这样改变条件。

.....
LEFT JOIN  tbl_Tabel tprev          
     ON ttab.[EmplCodeID]=tprev.[EmplCodeID]            
     AND ttab.[TabDate]=DATEADD("DAY",-1,tprev.[TabDate])  -- here
....