如何执行类似 "group by" 的操作以在一个字段上运行但在查询中包括所有字段

How to do something like "group by" to function on one field but include all fields in the query

假设我有以下 SQL 服务器 table:

我想要下面的结果,其中每个ID只有一条记录,它是字段A中值最小的一条,但是字段B和C也包括在内,像这样:

我将如何做到这一点?鉴于 group by in sql 服务器不允许包含不在 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 的数量,但确实如此,所以它一定不是我想的那样。

如有任何帮助,我们将不胜感激。谢谢。

试试这个:

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

SQL 服务器有一个很好的 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];