在SQL Server中不能在ROW_NUMBER()中使用别名?

时间:2011-09-04 05:37:59

标签: sql-server

当使用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 over无法解析“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),无论如何都要在这里使用别名吗?

4 个答案:

答案 0 :(得分:9)

MSDN docs for the T-SQL OVER clause说:

  

value_expression无法在选择列表中引用表达式或别名

答案 1 :(得分:2)

正如其他成员所说,您必须使用CTE或SubQuery。

不仅是Row_Number()函数,而且在tsql中你不能在同一个查询中引用别名,所以你要么必须使用上面提到的方法之一,要么使用你在帖子中使用的表达式。我希望它有道理! :)

答案 2 :(得分: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

答案 3 :(得分:-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