2011-09-04 29 views
9

SQLを使用しているとき、私は、グループ化された和で注文ROW_NUMBER列を作成する必要があります。SQL Serverで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回書いていますが、ここで別名を使用するにはどうしますか?

+2

[CTEまたはApply](http://stackoverflow.com/questions/7269195/is-it-possible-to-reuse-集約関数 - 同じ選択 - 結果/ 7269212#7269212)の部分です。 Celkoはなぜ[ここ](http://joecelkothesqlapprentice.blogspot.com/2006/06/reference-alias-field-name.html) –

答えて

0

の回避策CTEまたは副問合せを使用するようにしている。すでに述べたように、あなたが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

Row_Number()関数だけでなく、tsqlでは同じクエリでエイリアスを参照することはできませんので、上記の方法の1つまたは投稿で使用した式のいずれかを使用する必要があります。私はそれが理にかなってほしい! :)のみようなクエリの他の部分に別名を定義することによって

-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

関連する問題