首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

表中除开部分字段值相同的数据,只保留一行

2013-08-06 
表中去除部分字段值相同的数据,只保留一行自己写了一个比较麻烦的SQL,这样的(先不考虑效率)楼主用的是SQL

表中去除部分字段值相同的数据,只保留一行
自己写了一个比较麻烦的SQL,这样的(先不考虑效率)楼主用的是SQL Server
Contact表,去除AccountId和ContactName这两个字段值都相等的数据,保留一行

SELECT ContactId FROM Contact WHERE ContactId IN
(SELECT contactId FROM Contact c,
(SELECT AccountId,ContactName FROM Contact GROUP BY AccountId,ContactName HAVING count(*)>1) AS #tmp
where c.AccountId=#tmp.AccountId AND c.ContactName=#tmp.ContactName)
AND ContactId NOT IN(SELECT Max(ContactId) FROM Contact GROUP BY AccountId,ContactName HAVING count(*)>1);
测试了一下,有些问题,就是说如果字段值为NULL的时候
c.AccountId=#tmp.AccountId AND c.ContactName=#tmp.ContactName
这个判断就取不到数据了,因为要用 is NULL来判断,现在求大神可否解决此问题或者提供更好的方法,在线等,急!! SQL
[解决办法]
SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY accountid,contactname ORDER BY accountid) rn,* FROM contact) t
WHERE rn = 1
[解决办法]

SELECT ContactId FROM Contact as a where not exists (select 1 from Contact as b on a.AccountId=b.AccountId and a.ContactName=b.ContactName and b.ContactId>a.ContactId)

[解决办法]
c.AccountId=#tmp.AccountId AND c.ContactName=#tmp.ContactName

改成
isnull(c.AccountId,'')=isnull(#tmp.AccountId,'') AND isnull(c.ContactName,'')=isnull(#tmp.ContactName,'')

热点排行