Mar*_*rio 5 sql sql-server-2005
我有以下查询,检索每个国家/地区的用户数;
SELECT C.CountryID AS CountryID, 
       C.CountryName AS Country, 
       Count(FirstName) AS Origin
FROM Users AS U
INNER JOIN Country AS C ON C.CountryID = U.CountryOfOrgin
GROUP BY CASE C.CountryName, 
              C.CountryID
Run Code Online (Sandbox Code Playgroud)
我需要的是获得前10名然后将所有其他用户排在一行的方法.我知道如何获得前十名,但我仍然坚持让剩下的一排.有一个简单的方法吗?
例如,如果上面的查询返回17条记录,则显示前十条记录,而剩余7个国家/地区的用户总和应显示在第11行.在该行11上,countryid将为0且countryname Others
谢谢你的帮助!
Tho*_*mas 12
你没有说明你如何排名前十名,所以我假设最高排名更高?
With TopItems As
    (
    SELECT C.CountryID AS CountryID
            , C.CountryName AS Country
            , Count(FirstName) AS Origin
            , ROW_NUMBER() OVER( ORDER BY Count(FirstName) DESC ) As Num
    FROM Users AS U
        JOIN Country AS C 
            ON C.CountryID = U.CountryOfOrgin
    GROUP BY C.CountryName, C.CountryID
    )
Select CountryId, Country, Origin
From TopItems
Where Num <= 10
Union ALL
Select 0, 'Others', Sum(Origin)
From TopItems
Where Num > 10
Run Code Online (Sandbox Code Playgroud)