[英]SQL Server row_number
I have a problem to create a custom rownumber
with an alias column. 我在使用别
rownumber
创建自定义行号时rownumber
问题。 Here are some sample data: 以下是一些示例数据:
Table question
: 表
question
:
id title
-- --------
1 xx
2 xxx
.. ..
Table customerLikeQuestion
: 表
customerLikeQuestion
:
Id QuestionId CustomerId
---------------------------
1 20 xx
2 100 xx
xx
Query: 查询:
SELECT q.Id,
(SELECT COUNT(*)
FROM dbo.CustomerLikeQuestion
WHERE (QuestionId = q.Id)) AS LikeCount
FROM dbo.Question AS q
ORDER BY likecount DESC
The previous query shows: 上一个查询显示:
id LikeCount
2136 6
2138 5
2150 5
Now I'd like to put a rownumber
to count an incremental order of a row. 现在,我想输入一个
rownumber
来计算一行的递增顺序。 I tried the following query: 我尝试了以下查询:
SELECT TOP (100) PERCENT Id,
(SELECT COUNT(*) AS Expr1
FROM dbo.CustomerLikeQuestion
WHERE (QuestionId = q.Id)) AS LikeCount,
row_number() over (order by likecount) as RowNum
FROM dbo.Question AS q
ORDER BY likecount DESC
But it gives me the following error: 但这给了我以下错误:
invalid column Likecount.
列Likecount无效。
I do know that Over()
cannot work with alias, but how can I get around this problem, either with CTE or subquery, I have not yet come up with any idea. 我确实知道
Over()
无法使用别名,但是如何解决这个问题(无论是CTE还是子查询),我还没有想到。 please help. 请帮忙。
The right result should be like this: 正确的结果应该是这样的:
id likecount, rownum
----------------------
xx 6 1
xx 5 2
xx 4 3
.. 0 xx
Try this instead 试试这个
;WITH LiksCounts
AS
(
SELECT Id,
(SELECT COUNT(*) AS Expr1
FROM dbo.CustomerLikeQuestion
WHERE (QuestionId = q.Id)) AS LikeCount
FROM dbo.Question AS q
GROUP BY Id
)
SELECT TOP(100) *, row_number() over (order by likecount) as RowNum
fROM LiksCounts
ORDER BY RowNum ASC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.