我如何 select 来自 table 的所有行,其中每行的两列组合不同(SQL 服务器)?

How can I select all rows from a table where the combination of two columns is distinct on each row (SQL Server)?

我有一个 table 这样的:

用户职位

id          Name          PositionId          UserId          Code
---------------------------------------------------------------
1     |     Produce     |     1        |       1        |     A
2     |     Fruits      |     2        |       2        |     C
3     |     Grocery     |     1        |       3        |     B
4     |     Produce     |     1        |       1        |     A
5     |     Fruits      |     2        |       2        |     C
6     |     Dairy       |     4        |       8        |     F

我如何才能select 此 table 的所有结果,但删除 PositionId 和 UserId 的组合相同的重复条目?

select 语句的结果基本上是这样的:

id          Name          PositionId          UserId          Code
---------------------------------------------------------------
1     |     Produce     |     1        |       1        |     A
2     |     Fruits      |     2        |       2        |     C
3     |     Grocery     |     1        |       3        |     B
6     |     Dairy       |     4        |       8        |     F

我想对 PositionId 和 UserId 使用 DISTINCT 或 GROUP BY 进行过滤。我知道我可以使用以下方法轻松获得唯一值列表:

SELECT UserId, PositionId 
FROM UsersPositions
GROUP BY UserId, PositionId

但我也想抢其他专栏。从我所看到的 SO 来看,我似乎想将其设为子查询并将其加入另一个查询。但是我该怎么做呢?

我看到了类似这样的内容:Finding duplicate values in a SQL table, but it doesn't account for other columns. This post Selecting Distinct combinations. 有一些关于 INNER JOIN 的答案,但是当我尝试这样做时它无法正常工作。

我认为这对我来说 google 搜索会很快,但我似乎找不到任何适用于 SQL 服务器的东西。处理此类查询的最佳方式是什么?

这看起来是使用 CTE with window funtions 的完美案例。

;with cte
as (select id, [name], positionID, UserID, Code, row_number() over(partition by positionID, UserID order by id) rn
from tbl)
select * from cte where rn=1

根据您的示例数据,除 id 之外的所有四列都相同。如果是这种情况,您可以使用聚合:

select max(id), Name, PositionId, UserId, Code
from t
group by Name, PositionId, UserId, Code;