1

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

我希望为每个不同的 BAN 提取前 2 个 IID。我在 From 中使用了一个子查询来获得工作正常的 Max(IID)。但是,当我尝试将表加入我的第一条语句以获得下一个最高 MAX(IID) 时,我得到:

“消息 4104,级别 16,状态 1,行 1 无法绑定多部分标识符“ii.iid”。

这是指我第二次加入“where iid < ii.iid”中的 Where 语句

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 语句的第二个子查询。

我也试过 where iid < max(ii.iid)

这些都不起作用....如果有人可以在这里帮助我,我将不胜感激。

-本

4

2 回答 2

0

这应该适合你:

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 
于 2013-07-10T21:13:50.267 回答
0

这不是别名的范围您可以尝试使用 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
于 2013-07-10T21:20:01.527 回答