超过1列的区别

时间:2010-11-26 03:03:34

标签: sql select

我知道这听起来有点傻,但截至目前我需要一个解决方案。假设我有一张桌子:

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

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

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

2 个答案:

答案 0 :(得分:0)

您必须完全标识要检索的每一行。假设您的桌子精心制作并具有独特的PK,那么您可以沿着这些方向做点什么:

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

答案 1 :(得分:0)

我会使用分区。让我们聚合而不撕开表格。将分区添加到源表中,它将成为该过程中的唯一约束。

    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 -