需要选择查询

时间:2009-06-19 06:32:53

标签: sql sql-server select

考虑以下包含数据的表结构 -

AdjusterID  |  CompanyID  |  FirstName  | LastName | EmailID
============================================================
1001        | Sterling    | Jane        | Stewart  | janexxx@sterlin.com
1002        | Sterling    | David       | Boon     | dav@sterlin.com
1003        | PHH         | Irfan       | Ahmed    | irfan@phh.com
1004        | PHH         | Rahul       | Khanna   | rahul@phh.com
============================================================

其中Adj​​usterID是主键。没有。公司的理算员。

我需要有一个查询,列出每个公司的单个调整器。即我需要得到结果 -

========================================================
1001 | Sterling  | Jane  | Stewart | janexxx@sterlin.com
1003 | PHH       | Irfan | Ahmed   | irfan@phh.com
========================================================

如果任何人能帮助我,那将会很棒。

2 个答案:

答案 0 :(得分:2)

一种方式:

SELECT * FROM Adjusters 
WHERE AdjusterID IN(SELECT min(AdjusterID) 
                    FROM Adjusters GROUP BY CompanyID)

还有一些涉及联合和迭代的其他方法,但这个方法很简单,可以让你开始。

编辑:根据您的示例

,这假设您需要具有最低ID的调整器

答案 1 :(得分:0)

我知道杰里米的答案是有效的,所以我不再重复了。但你可以尝试另一个使用所谓的打破平局:

--//using a tie-breaker. Should be very fast on the PK field
--// but it would be good to have an index on CompanyID
SELECT  t.* 
FROM    MyTable t
WHERE   t.AdjusterID = (SELECT TOP 1 x.AdjusterID FROM MyTable x WHERE x.CompanyID = t.CompanyID ORDER BY AdjusterID)

可能性能更好。但更有用的是,如果您在表格中有另一列,并且您希望不仅为每个公司选择一个,而是为每个公司选择 best ,并使用其他列排名作为标准。因此,不是ORDER BY AdjusterID,而是按其他列排序。