如何用SQL语句实现相同列值只取第一行?

SQL SERVER中有表如下
电话 公司
电话1 a
电话2 a
电话3 a
电话4 b
电话5 b
电话6 b
电话7 b
电话8 c
电话9 c
一个公司可能有多部电话,现在要查公司电话,求一个公司只要一部电话就行了(哪一部都行),怎么用SQL语句实现啊?毕业太久了,忘光了,谢谢各位大侠了!!

最好能给出示例数据,和想要的结果。
可以如下:

select * from table a where 电话= (select min(电话) from table b where a.公司 = b.公司)


select * from table a where not exists(select * from table b where a.公司 = b.公司 and a.电话 > b.电话)
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-23
oracle中select title, type from a where rowid = (select max(rowid) from a b where b.title = a.title);其中a b指的是同一个表的别名追问

我补充了一下,麻烦你再给看看,用的是SQL SERVER 2005

追答

WITH mycte AS(
SELECT ROW_NUMBER() OVER( ORDER BY 公司) NO, 电话, 公司 FROM #test)
SELECT 电话, 公司 FROM mycte WHERE NOT EXISTS (
SELECT 公司 FROM mycte sub WHERE mycte.公司 = sub.公司 AND mycte.no >
sub.no );
其中#test为表名,mycte、sub为#test的别名,其中用到了ROW_NUMBER() OVER和NOT EXISTS函数,这条是可以实现你要效果

本回答被提问者和网友采纳
相似回答