超过 1 列有差异

发布于 2024-10-04 07:32:53 字数 292 浏览 3 评论 0原文

我知道这听起来有点傻,但现在我需要一个解决方案。假设我有一个表:

userid | category  
-------+---------  
derkv2 | Batch  
markj  | HTFS  
marjk  | TERMK  

如何返回唯一的行,只取用户所属的第一个类别? 所以它看起来像:

userid | category  
-------+---------  
markj  | HTFS  
derkv2 | BATCH

I know this sounds a bit silly, but as of now I need a solution. Say if I have a table:

userid | category  
-------+---------  
derkv2 | Batch  
markj  | HTFS  
marjk  | TERMK  

How can I return unique rows, only take the first category the user belongs to?
So it will look like:

userid | category  
-------+---------  
markj  | HTFS  
derkv2 | BATCH

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

护你周全 2024-10-11 07:32:53

您必须完全标识要检索的每一行。假设你的桌子制作精良并且具有独特的 PK,那么你可以按照以下方式做一些事情:

select
  *
from
  table
where
  pk in (select min(pk) from table group by userid)

You must fully identify each row that you want to retrieve. Assuming that your tables are well-crafted and have a unique PK then you could do something along these lines:

select
  *
from
  table
where
  pk in (select min(pk) from table group by userid)
愁杀 2024-10-11 07:32:53

我会使用分区。让您无需拆散表格即可进行聚合。将分区添加到源表中,它成为该过程中的唯一约束。

    select col1, 
           col2, 
           row_number() OVER (Partition BY col1 order by col2) ID
           From dbo.Example

结果

--x--|--y--


--A--|--1--

--A--|--2--

--A--|--3--

--B-| --1--

--C--|--1--

--C--|--2--

I would use a partition. Let's you aggregate without ripping apart table. Add the partition to your source table and it becomes a unique contraint in the process.

    select col1, 
           col2, 
           row_number() OVER (Partition BY col1 order by col2) ID
           From dbo.Example

Results

--x--|--y--


--A--|--1--

--A--|--2--

--A--|--3--

--B-|--1--

--C--|--1--

--C--|--2--

etc

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文