当使用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),无论如何都要在这里使用别名吗?
答案 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