0

我试图在以下查询中获取上一个日期 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个错误:


消息 207,级别 16,状态 1,第 47 行无效的列名称“ttab.TabDate”。消息 207,级别 16,状态 1,第 47 行无效的列名称“tprev.TabDate”。


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

4

1 回答 1

1

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

像这样改变条件。

.....
LEFT JOIN  tbl_Tabel tprev          
     ON ttab.[EmplCodeID]=tprev.[EmplCodeID]            
     AND ttab.[TabDate]=DATEADD("DAY",-1,tprev.[TabDate])  -- here
....
于 2015-01-25T10:10:52.713 回答