2009-09-02 37 views
0

我想在派生列排序的查询上使用SQL Server 2008的排名函数。这里有一个例子使用派生列的SQL排名函数

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功能不与别名的基础上,我读过工作。

有谁知道一个替代方案,我可以检索按派生列排序的结果集的顺序行号?

回答

3

如何使用派生表(子查询)?我认为类似下面的内容应该可以工作

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 
+0

结果集不会有OP所要求的所有列。而派生表上的ORDER BY将不会有任何影响。派生表返回关系,一个无序集合(袋)的行。 – 2009-09-02 20:37:18

+0

我意识到我错过了其他列 - 现在包括:) – 2009-09-02 20:40:27

+0

这工作得很好。感谢您的帮助。 – wrburgess 2009-09-02 23:25:57

2

使用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 
+0

我知道这也会起作用,但我使用了其他答案。感谢您的帮助! – wrburgess 2009-09-02 23:25:23