在DISTINCT中处理多个值

时间:2013-02-22 11:26:24

标签: sql-server

我想创建一个查询,从列中获取所有不同的值,如果有多个值,则应选择最高值。

就好像我有一个表架构,如:

  

EmployeeName |任务| TimeGiven

并且员工可以为同一个Task创建多个条目,并且我希望为所有具有最高Tasks的员工获取所有不同的TimeGiven,我该怎么做? ?

编辑
数据集:

EmployeName Task        TimeGiven
Mr. X       R&D         30
Mr. X       R&D         50
Mr. X       Devlpmnt    31
Mr. X       Devlpmnt    60
Mr. Y       R&D         40
Mr. Y       R&D         10
Mr. Y       R&D         90
Mr. Y       Devlpmnt    10

**Result Needed:**
Mr. X       R&D         50
Mr. X       Devlpmnt    60
Mr. Y       R&D         90
Mr. Y       Devlpmnt    10

我需要的是每个员工,为每项任务获得最高TimeGiven

1 个答案:

答案 0 :(得分:1)

听起来你需要使用group by

select EmployeeName
  , Task
  , TimeGiven = max(TimeGiven)
from t1
group by EmployeeName
  , Task

评论后修改:

你的意思是:

select Task
  , TimeGiven = max(TimeGiven)
from t1
group by Task

我所做的就是从查询中删除员工 - 无论哪个员工执行任务,这都将为每个任务提供记录最高的TimeGiven所有任务。

我还不清楚这是否是您需要的......如果没有,请提供示例数据集和您想要的输出。

添加数据集后进行修改:

第一个查询给出了正确的结果。我所做的就是添加一个order by子句来给出你的确切结果集:

select EmployeeName
  , Task
  , TimeGiven = max(TimeGiven)
from tasks
group by EmployeeName
  , Task
order by EmployeeName
  , Task desc

SQL Fiddle with demo。点击这里查看它的实际效果。