2014-03-04 104 views
0

我有以下表,并希望将通过SQL服务器GROUP BY只显示第一个匹配

[name]    [phone] 
doniking   081222222222 
doni    081222222222 
Bambang Gentholet 081111111111 
Bambang   081111111111 

我想要得到这样的结果:

[name]    [phone] 
doniking   081222222222 
Bambang Gentholet 081111111111 

回答

1

试试这个

SELECT [name],[phone] 
FROM (
     SELECT *,Row_Number() Over (Partition By phone Order By (Select Null)) AS RN 
     FROM Table1 
    ) AS T 
Where RN = 1 
OFFSET n ROWS 

您可以用您的自定义值替换n ...

Row_Number

+0

如果我增加一列型日期,如何让基于最新日期的名字吗? –

+0

你可以使用Max函数... –

+0

如何将OFFSET应用于该查询? –

2

试试这个

SELECT MAX(name), phone FROM <TableName> group by phone 

编辑:胶印

SELECT MAX(name), phone FROM <TableName> group by phone 
order by phone offset 10 rows 
FETCH NEXT 5 ROWS ONLY; 

Check this进一步的细节。

+0

如何应用OFFSET到那个查询? –

2

试试这个

SELECT name, 
    phone 
FROM (SELECT *, 
      Row_number() 
      OVER( 
       partition BY phone 
       ORDER BY name) row_num -- or you can have order by (select null) 
    FROM table1) t 
WHERE row_num = 1 
+0

如何将OFFSET应用于该查询? –

+0

你的意思是申请OFFSET是什么意思?你能详细说明你在找什么吗? –

+0

我打算分页需要LIMIT和OFFSET的结果。不幸的是我的SQL2005不支持OFFSET关键字。 –