与其他列无关

时间:2014-04-16 15:23:14

标签: sql oracle

我试图在我的查询中使用distinct

select distinct tvpAuditevent.TESTSEQUENCEID
from tvpAuditevent
where tvpAuditevent.Name = 'WorkstepCompleted';

它工作正常。并且只给我100个结果

但现在如果我添加其他列

select distinct tvpAuditevent.TESTSEQUENCEID, tvpAuditevent.USERNAME
from  tvpAuditevent
where tvpAuditevent.Name = 'WorkstepCompleted';
它给了我大约200个结果,这是错误的。 我只需要那100个结果,但除了testsequenceId之外还需要其他列。

如果有办法,请告诉我。

由于

3 个答案:

答案 0 :(得分:3)

如另一个答案所述,distinct关键字适用于select语句中的所有列。您不能将其限制为只有一列。

相反,您可以使用group by和聚合函数。例如,以下内容返回第二列中的最小值:

select ae.TESTSEQUENCEID, min(ae.USERNAME)
from  tvpAuditevent ae
where ae.Name = 'WorkstepCompleted'
group by ae.TESTSEQUENCEID;

事实上,distinct中的select关键字只是一种符号方便。以下内容:

select distinct col1, col2, . . ., coln
from table t

做同样的事情:

select col1, col2, . . . coln
from table t
group by col1, col2, . . . coln

答案 1 :(得分:0)

关键字DISTINCT只会从结果集中删除重复的结果。当您选择多个列时,它不能应用于单个列。

你想要什么并不清楚。我们假设我们有以下数据,其中第一个值是您想要分开的列,另一个是您希望显示为&#34的列;额外的数据"。

A,B
A,C

结果应该是什么? A,BA,C

答案 2 :(得分:0)

SELECT S.TESTSEQUENCEID,
 AE.tvpAuditevent.USERNAME     
FROM tvpAuditevent AE
JOIN     (select distinct tvpAuditevent.TESTSEQUENCEID 
 from tvpAuditevent where tvpAuditevent.Name = 'WorkstepCompleted' ) S
 ON S.TESTSEQUENCEID = AE.TESTSEQUENCEID
where AE.tvpAuditevent.Name = 'WorkstepCompleted'