简体   繁体   English

SQL Server row_number

[英]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

Live DEMO 现场演示

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM