内左连接以获得前一日期的值

时间:2015-01-25 09:30:04

标签: sql-server subquery expression case in-subquery

我正试图在以下日期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] )行中的字段出现错误。我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

这里的问题是使用在别名之前使用square bracket并在列名之后结束它,因此[tprev.TabDate]将被视为列,别名在此处进行转义。

改变这样的条件。

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