如何执行“分组依据”之类的功能以在一个字段上起作用但在查询中包括所有字段

问题描述

假设我有以下sql Server表:

enter image description here

我希望得到以下结果,其中每个ID只有一条记录,并且它是字段A的最低值的记录,但是字段B和C也包括在内,例如:

enter image description here

我该怎么做?鉴于sql server中的group by不允许包含不在group by子句中的字段。我尝试了几件事,但结果却都是一样,但结果数量不正确,最典型的是:

SELECT a.*
  FROM MyTable as a
  join (SELECT [ID],min ([Field A]) as [Field A] FROM MyTable group by [ID]) as b on a.ID = b.id
  where a.Field A = b.Field A and a.ID = b.ID
  order by OBJECTID

根据我的理解,此操作的结果数量应该不超过唯一ID的数量,因此它一定不能按照我认为的去做。

任何帮助将不胜感激。谢谢。

解决方法

SQL Server有一个不错的TOP 1 WITH TIES技巧,可以在这里使用:

SELECT TOP 1 WITH TIES [identity],ID,[Field A],[Field B],[Field C]
FROM yourTable
ORDER BY ROW_NUMBER() OVER (PARTITION BY id ORDER BY [Field A];
,

尝试一下:

WITH DataSource AS
(
    SELECT *,ROW_NUMBER() OVER (PARTITION BY ID ORDER BY FiledA ASC) rowID
    FROM MyTable
)
SELECT identity,id,[field a],[field b],[field c]
FROM DataSource
WHERE [rowID] = 1