显示多条记录的第二个结果-MSSQL2005

显示多条记录的第二个结果-MSSQL2005,sql,sql-server,sql-server-2005,sql-server-2000,Sql,Sql Server,Sql Server 2005,Sql Server 2000,我有一个查询,显示了一个客户的第二个结果。 我现在需要做的是显示特定列表中每个客户的第二个结果(例如20个不同的客户) 我该怎么做? MSSQL2000通过SSMS2005 1个客户的当前查询为 SELECT TOP 1 link_to_client, call_ref FROM ( SELECT TOP 2 link_to_client, call_ref FROM calls WITH (NOLOCK) WHERE link_to_client IN ('G/1931

我有一个查询,显示了一个客户的第二个结果。 我现在需要做的是显示特定列表中每个客户的第二个结果(例如20个不同的客户)

我该怎么做? MSSQL2000通过SSMS2005

1个客户的当前查询为

SELECT TOP 1 link_to_client, call_ref
FROM
(
    SELECT TOP 2 link_to_client, call_ref
    FROM calls WITH (NOLOCK)
    WHERE link_to_client IN ('G/1931')
        AND call_type = 'PM'
    ORDER BY call_ref DESC
) x
ORDER BY call_ref
谢谢

您需要使用函数,请尝试以下操作:

select
    link_to_client, call_ref 
from
    (
        select
            link_to_client, call_ref, 
            row_number() over (partition by link_to_client order by call_ref desc) n
        from 
            calls with (nolock) 
        where 
            link_to_client in ('G/1931') 
            and call_type = 'PM' 
    ) x
where
    n = 2 -- second result for every client
试试这个-

SELECT 
      link_to_client
    , call_ref
FROM (
    SELECT 
          link_to_client
        , call_ref
        , rn = ROW_NUMBER() OVER (PARTITION BY link_to_client ORDER BY call_ref DESC)
    FROM dbo.calls WITH (NOLOCK)
    WHERE link_to_client = 'G/1931'
        AND call_type = 'PM'
) x
WHERE x.rn = 2

我认为这将在SQLServer2000中起作用:

SELECT link_to_client, 
(
SELECT TOP 1 call_ref
FROM
(
    SELECT TOP 2 link_to_client
    FROM calls WITH (NOLOCK)
    WHERE link_to_client = a.link_to_client
        AND call_type = 'PM'
    ORDER BY call_ref DESC
) x
ORDER BY call_ref
) call_ref
FROM
(SELECT DISTINCT link_to_client
FROM calls WITH (NOLOCK)) a

当我在SQL Server 2005上尝试时,我得到了“'row_number'不是一个可识别的函数名”
。请提供您的兼容性级别。如果我知道如何告诉您我会:)我正在使用SQL Server Management Studio(v9)运行查询。现在您这么说,我认为这可能是正确的。我没有对服务器的物理访问权限,所以当我之前提到2005年时,我可能已经在考虑另一个了。我在这个问题上也得到了“'row_number'不是一个可识别的函数名”还有其他建议吗?