sql如何删除TA表中重复行,只保留重复行的一行???急啊,

 我来答
匿名用户
推荐于2018-04-19
展开全部
SQL Server 的处理办法

-- 首先创建测试表
CREATE TABLE test_delete(
name varchar(10),
value INT
);
go

-- 测试数据,其中 张三100 与 王五80 是完全一样的
INSERT INTO test_delete
SELECT '张三', 100
UNION ALL SELECT '张三', 100
UNION ALL SELECT '李四', 80
UNION ALL SELECT '王五', 80
UNION ALL SELECT '王五', 80
UNION ALL SELECT '赵六', 90
UNION ALL SELECT '赵六', 70
go

-- 首先查询一下, ROW_NUMBER 效果是否满足预期
SELECT
ROW_NUMBER() OVER (PARTITION BY name, value ORDER BY (SELECT 1) ) AS no,
name,
value
FROM
test_delete

no name value
----- ---------- -----------
1 李四 80
1 王五 80
2 王五 80
1 张三 100
2 张三 100
1 赵六 70
1 赵六 90

从结果上可以看到,如果有重复的,完全一样的话, no 是有大于1的。

-- 创建视图
CREATE VIEW tmp_view AS
SELECT
ROW_NUMBER() OVER (PARTITION BY name, value ORDER BY (SELECT 1) ) AS no,
name,
value
FROM
test_delete

-- 删除 视图中的 no 不等于 1 的数据。
1> DELETE FROM tmp_view WHERE no != 1
2> go

(2 行受影响)
1>
2> select * from test_delete;
3> go
name value
---------- -----------
张三 100
李四 80
王五 80
赵六 90
赵六 70

(5 行受影响)

结果看上去是满足预期的。
wuliangii
2015-03-25 · TA获得超过165个赞
知道小有建树答主
回答量:120
采纳率:0%
帮助的人:120万
展开全部
你没有给出表TA的结构啊,所以只能给您一个万能的方法了:
select distinct * into TA2 from TA
truncate table TA
insert TA
select * from TA2
原理是用distinct把表TA的重复项去掉,并将结果另存为表TA2
再清空表TA
最后把表TA2的记录重新插入到表TA中
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式