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