【问题标题】:Inner left join to get value on previous date左内连接以获取上一个日期的值
【发布时间】:2015-01-25 09:30:03
【问题描述】:

我正在尝试在以下查询中获取上一个日期 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])”行中的字段出现错误。我在这里做错了什么?

【问题讨论】:

  • tbl_Tabel中是否有TabDate
  • 是的,我在 tbl_Tabel 中有 TabDate 列

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


【解决方案1】:

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

像这样改变条件。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多