Sql server 2005 使用上一个联接语句中的标识符的SQL Server 2005

Sql server 2005 使用上一个联接语句中的标识符的SQL Server 2005,sql-server-2005,Sql Server 2005,我有一个有两列的表,第一列是PKey,第二列是标识符;分别为BAN和IID 我想为每一个不同的禁令抽掉前两名。我在From中使用了一个子查询来获取MaxIID,它工作得很好。但是,当我尝试将表加入到我的第一个语句中以获得下一个最高的MAXIID时: Msg 4104,16级,状态1,第1行 无法绑定多部分标识符ii.iid 这是指我的第二个join中的Where语句,其中iid

我有一个有两列的表,第一列是PKey,第二列是标识符;分别为BAN和IID

我想为每一个不同的禁令抽掉前两名。我在From中使用了一个子查询来获取MaxIID,它工作得很好。但是,当我尝试将表加入到我的第一个语句中以获得下一个最高的MAXIID时:

Msg 4104,16级,状态1,第1行 无法绑定多部分标识符ii.iid

这是指我的第二个join中的Where语句,其中iid
select distinct ii.BAN, ii.IID, ii2.IID
    from (select distinct BAN, IID = Max(IID) from Bill_Timeliness..Invoices with(nolock) group by BAN) II
    join (select distinct BAN, IID = Max(IID) from Bill_Timeliness..Invoices with(nolock) where iid  < ii.iid group by BAN) II2 
        on ii.ban = ii2.ban
我尝试将第一部分重新创建为where语句的第二个子查询。 我也试过iid
-Ben

这应该适合你:

select o.BAN, 
       x.MaxID as TopID, 
       MAX(case when o.IID != x.MaxID then o.IID else null end) as SecondID
from (
    select BAN, MAX(IID) as MaxID
    from Bill_Timeliness..Invoices group by BAN) x
inner join Bill_Timeliness..Invoices o
on x.BAN = o.BAN
group by o.BAN,
         x.MaxID 

别名的作用域不是这样的 你可以试试CTE

;with CTE_X as (
select BAN, IID, dense_rank() over (partition by BAN order by IID desc) as ranker from    Bill_Timeliness..Invoices)


select I.BAN, I.IID, II.IID from CTE_X I inner join CTE_X II on
I.BAN = II.BAN and I.ranker = 1 and II.ranker = 2