2011-09-04 73 views
9

我要創建一個分組的總和,下令ROW_NUMBER列在使用SQL時:不能在ROW_NUMBER()中使用別名?

select Sales.Name, SUM(Sales.Bill) as billsum, ROW_NUMBER() over (order by billsum DESC) as rn 
from Sales group by Sales.Name 

它報告錯誤,因爲ROW_NUMBER在無法分析「billsum」的別名,我必須寫:

select Sales.Name, SUM(Sales.Bill) as billsum, ROW_NUMBER() over (order by SUM(Sales.Bill) DESC) as rn 
from Sales group by Sales.Name 

所以我在這裏寫SUM(Sales.Bill)兩次,有沒有反正在這裏使用別名?

+2

只有通過在查詢的另一部分定義的別名,如[CTE或APPLY](http://stackoverflow.com/questions/7269195/is-it-possible-to-reuse- aggregate-functions-results-in-the-same-select/7269212#7269212)部分。 Celko解釋了爲什麼[這裏](http://joecelkothesqlapprentice.blogspot.com/2006/06/reference-alias-field-name.html) –

回答

0

可能的變通是使用CTE或子查詢:

SELECT Name, billsum, ROW_NUMBER() OVER (ORDER BY billsum DESC) AS rn 
FROM 
    (SELECT Sales.Name, SUM(Sales.Bill) AS billsum 
    FROM Sales 
    GROUP BY Sales.Name 
) tmp 
2

正如已經被你要麼必須使用CTE或子查詢其他成員說出來。

不僅ROW_NUMBER()函數,但在T-SQL,你不能引用同一個查詢的別名,所以要麼你必須使用方式上面所提到的,或者您在您的文章中使用的一種表達。我希望它是有道理的! :)

-1
-- Reorder after cutting out qty = 0. 
SELECT *,ROW_NUMBER() OVER (partition by claimno ORDER BY itemno) as 'alias name' 
from dbo.OrderCol 
where QTY <> 0 
+0

這真的是不正確的。這個問題在很久以前就被正確地回答了。 – RichardTheKiwi