【发布时间】:2010-12-20 03:39:13
【问题描述】:
类似:How can I delete duplicate rows in a table
我觉得这是不可能的,我将不得不以乏味的方式去做,但我会看看你们要说什么。
我有一张相当大的桌子,大约有 400 万行和 50 多列。它有一个应该是唯一的列,Episode。不幸的是,Episode 不是独特的 - 这背后的逻辑是偶尔会改变行中的其他字段,尽管 Episode 被重复。但是,有一个实际上唯一的列,Sequence。
我想尝试识别具有相同剧集编号但它们之间有些不同(除了序列)的行,因此我可以确定这种情况发生的频率,以及是否值得允许,或者我应该直接删除行并忽略可能的轻微差异。
我希望创建一个显示剧集编号的表格,并为每个表格列创建一个列,标识两侧的值,它们的不同之处:
SELECT Episode,
CASE WHEN a.Value1<>b.Value1
THEN a.Value1 + ',' + b.Value1
ELSE '' END AS Value1,
CASE WHEN a.Value2<>b.Value2
THEN a.Value2 + ',' + b.Value2
ELSE '' END AS Value2
FROM Table1 a INNER JOIN Table1 b ON a.Episode = b.Episode
WHERE a.Value1<>b.Value1
OR a.Value2<>b.Value2
(这可能充满漏洞,但我希望突出显示更改的值的想法。)
不幸的是,对 50 列进行这样的查询非常痛苦。显然,如果只使用一次,它并不一定要坚如磐石,但与此同时,代码复制的越多,就越有可能遗漏一些东西。据我所知,我不能只搜索 DISTINCT,因为 Sequence 是不同的,同一行会以不同的方式弹出。
有没有人有可能有帮助的查询或功能?会输出类似于上述查询结果的东西,还是不同的解决方案?正如我所说,现在我并不是真的要删除重复项,只是识别它们。
【问题讨论】:
-
@Margaret:抱歉,我没听懂有关序列列的部分。我更新了我的答案。
标签: sql sql-server sql-server-2005 tsql duplicate-removal