sql server 有一个字段有重复,另一个字段没有重复,我只想按有重复的取第一条

来源:百度知道 编辑:UC知道 时间:2024/05/12 07:37:31
比如说,我有两个字段parentid(有重复的),memo(没有重复的)
我想取出来根据parentid不要重复。
我这张表里有200w数据,刚才用游标,太慢了!
在线等。。。谢谢

先做一个视图:仅取 parentid(有重复的)中的第一条
再做一个交叉查询即可
例如 表A 有主键B和你的字段parentid(有重复的),memo(没有重复的)
视图C:select parentid,min(b) from a group by parentid
然后用: select c.parentid,a.memo from c inner join a on a.b=c.b

不需要游标这么麻烦的,系统会自动进行优化的。

有好多方法,比如说用 DISTINCT :
SELECT DISTINCT(PartentID), Memo
FROM TableName
就是一种比较有效的方法,还有其他的方法,SQLSERVER2005下
WITH Temp AS
(SELECT ROW_NUMBER() OVER(PARTITION BY PartentID ORDER BY @@ROWCOUNT) AS ID, PartentID, Memo
FROM TableName)
SELECT * FROM Temp WHERE ID = 1 也是一种很好的方法,不过我刚才测试,好像效率稍微不如 DISTINCT,
还有其他的方法,比如你自己讲的用游标或者WHILE循环逐行扫描,不过这样子效率就很低了!