怎么去除 sql重复(有点小奇葩,不信过来看看吧)
问题是这样的: 这个表有两个列:部门 A,上级部门 B; 如果 有一行数据是:部门 B,上级部门 A
出现 一行数据 B C ,另外 一组数据 C B,就该排除,依次类推.....
这个是个测试表,暂且不考虑,这种奇葩现象咯.
各位 求助攻,小弟 先谢了! sql 不行哈...
[解决办法]
delete from table1 where id=(
select top 1 bid from
(
select count(*) count, a.id aid, b.id bid from table1 a join table1 b on a.id = b.pid and a.pid = b.id
)c
where count > 1);
/*id为部门 pid为上级部门*/
/*最好有个时间可以排序*/
三层就不行了,两层应该可以
[解决办法]
DECLARE @t TABLE(dep VARCHAR(10),pardep VARCHAR(10));
INSERT INTO @t SELECT 'a','b'
UNION ALL SELECT 'b','c'
UNION ALL SELECT 'c','d'
UNION ALL SELECT 'b','a'
UNION ALL SELECT 'c','b'
UNION ALL SELECT 'd','c'
UNION ALL SELECT 'x','y'
;WITH c1 AS (
SELECT rn=ROW_NUMBER() OVER(ORDER BY GETDATE()),* FROM @T
)
SELECT * FROM (
SELECT a.*,b.rn AS rnx FROM c1 a JOIN c1 b ON a.dep=b.pardep AND a.pardep=b.dep
) x WHERE rn<rnx
/*
rn dep pardep rnx
-------------------- ---------- ---------- --------------------
1 a b 4
2 b c 5
3 c d 6
*/
不是很精确,楼主多测试一下,因为这种重复的只能选择一个删除掉.
还有就是多层环的情况可能没有考虑的.比如
a b
b c
c a --其实这一行也是不应该的.
楼主头像不错.