0

rownumberエイリアス列を使用してカスタムを作成する際に問題があります。サンプルデータを次に示します。

question:

id   title   
--   --------    
1     xx
2     xxx

..

customerLikeQuestion:

Id   QuestionId CustomerId
---------------------------
1       20          xx
2       100         xx 
xx

クエリ:

SELECT  q.Id,
        (SELECT     COUNT(*) 
         FROM          dbo.CustomerLikeQuestion
         WHERE      (QuestionId = q.Id)) AS LikeCount
FROM dbo.Question AS q
ORDER BY likecount DESC

前のクエリは次を示しています。

 id    LikeCount
2136    6
2138    5
2150    5

rownumberここで、行の増分順序をカウントするためにa を入れたいと思います。次のクエリを試しました。

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

しかし、それは私に次のエラーを与えます:

Likecount 列が無効です。

エイリアスでは機能しないことはわかっていOver()ますが、CTEまたはサブクエリを使用してこの問題を回避するにはどうすればよいですか。まだアイデアが思い浮かびません。助けてください。

正しい結果は次のようになります。

id  likecount, rownum
----------------------    
xx     6        1
xx     5        2 
xx     4        3
..     0        xx
4

1 に答える 1

3

代わりにこれを試してください

;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

ライブデモ

于 2012-10-14T11:08:24.487 に答える