我试图使用SQL Server 2008中排名功能上由派生列排序的查询。下面是一个例子

SELECT 
    table.FirstName, table.LastName, 
    CalculatedValue(table.number) As Points, 
    ROW_NUMBER() OVER (ORDER BY points) AS 'Row Number' 
FROM table 
ORDER BY points

我总是得到一个错误的无效列名“点” 因为OVER功能不与别名的基础上,我读过工作。

没有人知道的替代哪里可以检索由派生列排序的结果集的顺序行数?

有帮助吗?

解决方案

如何使用派生的表(子查询)?我觉得像下面应该工作

SELECT 
    ROW_NUMBER() OVER (ORDER BY sub.Points) AS 'Row Number',
    sub.FirstName,
    sub.LastName,
    sub.Points
FROM
(

    SELECT 
        table.FirstName, 
        table.LastName, 
        CalculatedValue(table.number) As Points
    FROM 
        table    
) sub
ORDER BY
    sub.Points

其他提示

使用一个CTE来计算您的积分,那么排名在CTE。

 WITH tableWithPoints AS (
   SELECT 
       table.FirstName, table.LastName, 
       CalculatedValue(table.number) As Points
   FROM table)

 SELECT FirstName, LastName, Points,
     ROW_NUMBER() OVER (ORDER BY Points) AS 'Row Number' 
 FROM 
     tableWithPoints ORDER BY Points
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top