如何选择最丰富的记录?
我有一个不幸的运气,不得不处理包含特定记录重复的数据库,我正在寻找一种快速方式来说“获取最多的记录并更新重复项以匹配它”。如何选择最丰富的记录?
从那里我可以选择不同的记录并获得一组有用的记录。
任何想法?
这是主要的名称和地址是否有帮助?
好了很多的问题要求在这里,我得加点点:
首先,我想拉“填充”最不最“流行”,这意味着值最大的行不是null。
一旦我有了设置(这很容易,因为在我的情况下id的匹配),我可以填充其他行中的缺失值。
我不想破坏数据,我只打算根据精确匹配(例如通过id)更新数据。
我现在的问题是搞清楚哪一组行中有最多填充的字段,说过自发布这个问题以来,我发现了一种不同的方式来解决我发送到远程的更大问题服务器,但我仍然有兴趣知道这个解决方案可能是什么。
的样本数据可能是这个样子......
id name addr1 addr2 ect
1 fred 1 the street Some town ...
1 fred null null null
给出一个完整的匹配对这样的表,我想找到的对然后抓住一个在它的信息,并将这些值,其中另一行有一个空值。
请记住,您将有可能在这里销毁数据。仅仅因为一行中填充的列数较少并不意味着它在填充的列中的准确性不够高填充了。
我假定重复项是由名为“name”的列确定的。您需要根据您重复的定义进行调整。另外,既然你没有给出关于如何处理“人口最稠密”的关系的规则,我只选择了具有最低id的行。
UPDATE
T1
SET
col_1 = T2.col_1,
col_2 = T2.col_2,
....
FROM
My_Table T1
INNER JOIN My_Table T2 ON
T2.name = T1.name AND
T2.id =
(
SELECT TOP 1
T3.id
FROM
My_Table T3
WHERE
T3.name = T1.name
ORDER BY
CASE WHEN col_1 IS NOT NULL THEN 1 ELSE 0 END +
CASE WHEN col_2 IS NOT NULL THEN 1 ELSE 0 END +
... DESC,
id ASC
)
编辑:我刚才重读你的问题,你提到,“在那里我可以选择不重复的记录,并获得记录的一组有用的。”如果这是你真正想要的,那就不必更新其他行,只需选择你首先想要的人,离开一切不变:
SELECT
T1.id,
T1.name,
T1.col_1,
T1.col_2,
...
FROM
My_Table T1
WHERE
T1.id =
(
SELECT TOP 1
T2.id
FROM
My_Table T2
WHERE
T2.name = T1.name
ORDER BY
CASE WHEN T2.col_1 IS NOT NULL THEN 1 ELSE 0 END +
CASE WHEN T2.col_2 IS NOT NULL THEN 1 ELSE 0 END +
... DESC,
T2.id ASC
)
这里的问题当然是这可能不会过滤出正确的结果,但我看到了你思想背后的逻辑。 – War 2010-07-08 15:07:21
如何重复的记录呈现的?所有字段是相同的?只有ID是不同的? – Oded 2010-07-02 14:43:41
另外,什么定义,“最流行”? – 2010-07-02 14:44:52
@Tom H. - 我认为这意味着大部分重复的记录。 – Oded 2010-07-02 14:46:48