Search code examples
sql-serversubqueryexpressioncasein-subquery

Inner left join to get value on previous date


I am trying to get value of GR2 on previous date TabDate in following query:

    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;

What I get on execution is 2 errors:


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'.


Its something wrong with "LEFT JOIN tbl_Tabel tprev". Error rises on fields in line "AND [ttab.TabDate]=DATEADD("DAY",-1,[tprev.TabDate])". What I do wrong here?


Solution

  • the problem here is use have used square bracket before the alias name and ended it after the column name so [tprev.TabDate] will be considered as a column, Alias name is escaped here.

    change the condition like this.

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