--少了一次嵌套:
select 
*
from 
(SELECT 
ROW_NUMBER() OVER (ORDER BY UserNum DESC) AS Row,
* FROM
    (
    SELECT  
    u.UserId, u.UserName, 
    (Count(UserId) FROM UserGroup as g WHERE g.GroupId=u.GroupId) as UserNum
    FROM
       User as u
    )T
)tmp
WHERE Row<? AND Row>?

解决方案 »

  1.   

    原先写错了些地方,最后是这样,可以运作。但是请问这样效率如何?ROW_NUMBER() 按照UserNum排序进行分页,那数据库执行的时候不是要先完全统计一次UserNum才知道怎么排序? -- 分页 -- 
    WITH Groups_CTE(Row, GroupId, [Name], Intro, UserNum)
    AS
    (
    SELECT
        ROW_NUMBER() OVER (ORDER BY UserNum DESC) AS Row, 
        * FROM
         (
            SELECT 
                g.GroupId, g.Name,g.Intro,  
                (select count(UserId) from UserGroup AS ug where g.GroupId = ug.GroupId) as UserNum
            FROM Group as g
         )T
    )

    SELECT GroupId, [Name], Intro, UserNum
    FROM 
    Groups_CTE
    WHERE Row BETWEEN @StartIndex AND @StartIndex+@PageSize-1