Distinct Clause在SQL Server 2005中不起作用

时间:2015-03-14 07:29:54

标签: sql sql-server-2005

我有很多记录将多个taskid分配给多个人,但我想显示不同的记录意味着SQL中的输出只有一个taskid

以下是我的查询不工作给我解决方案

SELECT DISTINCT 
    taskid, taskname, person, userid, dept, date, status, monitor, 
    comments, monitor_comments, respondtime, assignedby, 
    reassigncomment, priority,date_complete, followup_date, re_status
FROM
    task
WHERE     
    (status IS NULL)

3 个答案:

答案 0 :(得分:1)

在你的情况下,结果是截然不同的,但不是你想要的,因为你只需要不同的任务ID,那么你应该使用它:

SELECT DISTINCT taskid
FROM         task
WHERE     (status IS NULL) 

然后结果将是不同的任务ID。

答案 1 :(得分:0)

首先,如果您在名为taskid的表格中有一个名为task的列,我认为应该是唯一的 - 除非它在某种程度上是一个缓慢变化的维度。

如果它不是唯一的,那么你要问的问题是:你想要哪一行?

在任何情况下,SQL Server 2005都有一个名为row_number()的函数可以解决您的问题:

select t.*
from (select t.*, row_number() over (partition by taskid order by taskid) as seqnum
      from task
     ) t
where seqnum = 1;

这将为每个taskid返回一个任意行。如果您有一种方法可以选择一行而不是另一行,那么请调整order by子句。

答案 2 :(得分:0)

我添加了一个列优先级,其中该列的值是相同TASKID的1,其他的将是0,所以我可以找到

SELECT DISTINCT     taskid,taskname,person,userid,dept,date,status,monitor,     评论,monitor_comments,响应时间,assignby,     reassigncomment,priority,date_complete,followup_date,re_status 从     任务 WHERE
    (状态为空)和(优先级=' 1')