SQL Server:按事件列出的前10个查询,不使用分组依据

SQL Server:按事件列出的前10个查询,不使用分组依据,sql,sql-server,Sql,Sql Server,我正在尝试编写一个查询,查询数据库中某个列的前10个匹配项。但我不想看到它在一组模式 我有一个包含40000行和20列的数据库,我想编写一个查询,返回一个特定列中前10个出现的x行 当我使用此选项时: Select top 10 colum.name from table.name select top 10 colum.name From table.name group by colum.name order by colum.name DESC 我得到的是数据库中前10行 当我使用此选

我正在尝试编写一个查询,查询数据库中某个列的前10个匹配项。但我不想看到它在一组模式

我有一个包含40000行和20列的数据库,我想编写一个查询,返回一个特定列中前10个出现的x行

当我使用此选项时:

Select top 10 colum.name
from table.name
select top 10 colum.name
From table.name
group by colum.name
order by colum.name DESC
我得到的是数据库中前10行

当我使用此选项时:

Select top 10 colum.name
from table.name
select top 10 colum.name
From table.name
group by colum.name
order by colum.name DESC
我得到了前10个匹配项,但按我的列分组,我想看到的是相同的前10个匹配项,但显示了所有行

我不知道这是不是一个愚蠢的问题,但我对这个问题失去了所有的冷静

因此,感谢您提前抽出时间

you could use row_number()/rank()/dense_rank () depending on the requirement
例:


这将输出10行

您可以使用以下内容:

;WITH Top10Distinct AS
(
    SELECT DISTINCT TOP 10 YourColumn
    FROM dbo.YourTable
    ORDER BY YourColumn DESC
)
SELECT *
FROM dbo.YourTable tbl
INNER JOIN Top10Distinct cte ON tbl.YourColumn = cte.YourColumn

CTE首先获取列的前10个不同值,然后将前10个值与实际的基表dbo.YourTable合并,从而从基表中完整检索具有前10个不同列值之一的所有行。

您可以使用脏子查询:

Select column.name
from table.name
Where column.name IN (Select top 10 column.name
                      from table.name
                      group by column.name
                      order by count(*) desc)

你的问题不清楚。可以添加所需的输出吗?对于一列值,可以有多行。在这种情况下,您希望显示哪些行?吹毛求疵:这是一个带有m-n的列,而不是一个列。。。你的帖子中总是拼写错误谢谢你,马克,它就像魔术一样。对不起,我的英语,我是葡萄牙人,我不经常使用英语,因为我喜欢。感谢本达克利尔。你的想法也行。