当前位置: 代码迷 >> Sql Server >> 大神帮忙写个SQL取舍不重复记录语句
  详细解决方案

大神帮忙写个SQL取舍不重复记录语句

热度:84   发布时间:2016-04-24 08:57:26.0
大神帮忙写个SQL选择不重复记录语句。
6907992505268 250ML伊利早餐奶 NULL NULL NULL NULL NULL
6907992505268 伊利早餐奶(核桃)250ML 盒   1*24 2.50000000 2.9000 NULL
6907992505268 伊利核桃早餐奶 瓶   NULL .0000           
6907992505268 伊利核桃早餐奶 瓶   NULL NULL NULL NULL

有一个几万行资料表,里面有很多重复的记录,我想以 第一列来判断 删除重复记录只保留一条!
想保留最完整的那一条,比如上面 第二条 比较完整。。。
该怎么写。
------解决思路----------------------
首先你必须有一个id字段区分各记录。
假定其它各的列名分别叫:col1, col2, col3……
WITH t1 AS (
    SELECT id,
           col1,
           (CASE WHEN col2 IS NULL THEN 0 ELSE 1 END)+
           (CASE WHEN col3 IS NULL THEN 0 ELSE 1 END)+
           (CASE WHEN col4 IS NULL THEN 0 ELSE 1 END)+
           (CASE WHEN col5 IS NULL THEN 0 ELSE 1 END)+
           (CASE WHEN col6 IS NULL THEN 0 ELSE 1 END)+
           (CASE WHEN col7 IS NULL THEN 0 ELSE 1 END) 完整度
     FROM 资料表
)
,t2 AS (
    SELECT id,
           col1,
           ROW_NUMBER() OVER(PARTITION BY col1 ORDER BY 完整度 DESC) rn
      FROM t1
)
DELETE 资料表
  FROM 资料表, t2
 WHERE 资料表.id = t2.id
   AND t2.rn > 1