同时使用DISTINCT和TOP

use*_*282 16 sql t-sql sql-server

我想在同一时间使用distinct&top,我做到了

SELECT distinct TOP 10 * FROM TableA

但我仍然有一个重复的PersonId所以我应该这样做:

SELECT distinct (personID) TOP 10 * FROM TableA 但语法错误,所以我想知道是否有任何解决方案

谢谢,

Mat*_*che 34

你正在使用一个SELECT *拉入所有记录的东西.如果要仅使用真正的DISTINCT列出要接收其不同值的列.如果您有多列,则所有这些列组合在一起构成一条不同的记录.

SELECT distinct TOP 10 personID 
FROM TableA
Run Code Online (Sandbox Code Playgroud)

请注意,如果没有ORDER BY这个,将返回前10个记录,没有特定的顺序.每次运行查询时结果可能不同.


Aru*_*zhi 10

如果您使用这样的查询,它的工作原理很简单:

SELECT DISTINCT TOP 2 name FROM [ATTENDANCE] ; 
Run Code Online (Sandbox Code Playgroud)

在上面的查询中,name是column_name,[ATTENDANCE]是table_name。

您还可以使用WHERE它来制定过滤条件。


Gor*_*off 7

您似乎想要为不同的人提供 10 条随机记录。尝试这个:

select t.*
from (select t.*,
             row_number() over (partition by personid order by (select NULL)) as seqnum
      from t
     ) t
where seqnum = 1
Run Code Online (Sandbox Code Playgroud)

但是,一般而言,在使用时,top您还应该使用 anorder by来指定“顶部”的含义。