我如何 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;
我有一个 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;