SQL Server 2008使用RANK动态编号行

时间:2011-11-03 15:33:15

标签: sql-server-2008 count rank

我有一个存储过程来提取SS报告的数据。我需要包含一个行号列,但我之前从未使用过RANK而且我得到了这个错误:列'WL.SSN'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中..任何人都可以帮助我的语法?这是我到目前为止所拥有的。

    SELECT
        WL.SSN,
        WL.LastName,
        WL.FirstName,
        WL.AddressLine1,
        WL.AddressLine2,
        WL.AddressLine3,
        WL.City,
        WL.State,
        WL.ZipCode,
        WL.Plus4,
        S.SeminarID,
        S.SeminarType,
        RANK = Count(*)                     
    FROM 
        @tblWaitList WL
        INNER JOIN @tblSeminar S ON WL.SeminarGuid=S.SeminarGuid
    WHERE
        S.SeminarID = @SeminarID AND S.SeminarType = @SeminarType
        AND RowNumber = COUNT(*)    
    ORDER BY
        RANK

我已经尝试了http://support.microsoft.com/kb/186133的几乎所有方法,但我遗漏了一些东西。

以下是我试图实现的一个例子......

 Rank        Au_Lname              Au_Fname
 ----        --------------        -----------
 1         Bennet                Abraham
 2         Blotchet-Halls        Reginald
 3         Carson                Cheryl
 4         DeFrance              Michel
 5         del Castillo          Innes
 6         Dull                  Ann
 7         Greene                Morningstar
 8         Green                 Marjorie

1 个答案:

答案 0 :(得分:1)

这应该做:

SELECT rank() OVER (ORDER BY WL.LastName, WL.FirstName) as rank, WL.LastName, WL.FirstName 
FROM  @tblWaitList WL         
INNER JOIN @tblSeminar S 
ON WL.SeminarGuid=S.SeminarGuid     
WHERE S.SeminarID = @SeminarID AND S.SeminarType = @SeminarType         
ORDER BY rank ;