sql server在分组时获得第一个值

Ern*_*nst 7 grouping sql-server-2000

我有一个表格,其中列a不一定具有不同的值,列b具有多个不同值的每个值.我想得到一个结果,每个值只出现一次,并得到a的第一个找到的值为a的值.我如何在sql server 2000中执行此操作?

示例表:

a  b
1  aa
1  bb
2  zz
3  aa
3  zz
3  bb
4  bb
4  aa
Run Code Online (Sandbox Code Playgroud)

通缉结果:

a  b
1  aa
2  zz
3  aa
4  bb
Run Code Online (Sandbox Code Playgroud)

另外,我必须补充一点,b列中的值都是文本值.我更新了示例以反映这一点.谢谢

gbb*_*iya 8

;with cte as
    (
  select *,
    row_number() over(partition by a order by a) as rn
  from yourtablename
    )    
    select  
a,b
from cte 
where rn = 1 
Run Code Online (Sandbox Code Playgroud)


nfe*_*ner 7

SQL不知道按表行排序.您需要在表结构中引入顺序(通常使用id列).也就是说,一旦你有一个id列,它就很容易了:

SELECT a, b FROM test WHERE id in (SELECT MIN(id) FROM test GROUP BY a)
Run Code Online (Sandbox Code Playgroud)

使用内部SQL Server函数可能有一种方法可以做到这一点.但是这个解决方案是可移植的,并且任何知道SQL的人都更容易理解.

  • 提及您不能假设记录顺序与插入顺序相同的事实+1. (2认同)