2009-09-02 38 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