2013-03-18 70 views
8

我想用不同的&顶的同时,我也使用DISTINCT和TOP在同一时间

SELECT distinct TOP 10 * FROM TableA

但我仍然有一个重复的PERSONID,所以我因子评分做到:

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

感谢,

+0

如果您只想选择一个“personID”(如果您有重复行),您将执行什么操作? – 2013-03-18 14:36:00

回答

22

您正在使用的是所有记录中的SELECT *。如果您想仅使用真正的DISTINCT列出您想要接收不同值的列。如果你有多个列,那么所有这些列组合成一个独特的记录。

SELECT distinct TOP 10 personID 
FROM TableA 

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

-1

我固定它,我没有

select distinct personid from (SELECT TOP 10 * FROM TableA) 
+0

没有结果的订单可能会有所不同。即使是带有PK的表格也不能保证在没有订单的情况下返回相同的订单。 – Paparazzi 2013-03-18 15:29:53

+0

如果您在前10名结果中有相同的人物身份,那么这将不起作用,您只会得到9个结果。就像'从表A中选择不同的前10名personID'一样简单 – 2013-03-18 17:18:29

0

你似乎想为不同的人10个随机记录。使用top时,你应该也可以使用order by到指定的“顶”的意思,

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

在一般情况下,虽然:试试这个。

1

选择表A样本不同PERSONID 10

这个作品在Teradata的

0

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

SELECT DISTINCT TOP 2 name FROM [ATTENDANCE] ; 

在上面的查询,name是列名和[ATTENDANCE]是table_name。您也可以使用WHERE来制作过滤条件。

-1

如果目标是选择每PERSONID的顶部1的记录,然后使用

select * from TableA group by personid 

既然你是“按组”做一个,它将返回每列,但会忽略(不显示)任何具有相同personid的附加行