考虑以下包含数据的表结构 -
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
============================================================
其中AdjusterID是主键。没有。公司的理算员。
我需要有一个查询,列出每个公司的单个调整器。即我需要得到结果 -
========================================================
1001 | Sterling | Jane | Stewart | janexxx@sterlin.com
1003 | PHH | Irfan | Ahmed | irfan@phh.com
========================================================
如果任何人能帮助我,那将会很棒。
答案 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
,而是按其他列排序。