SQL语句 去重问题

如图 上面是数据库中的数据 下面是想要得到的效果 就是相邻的重复的去掉 求各位大神帮忙

如果只是连续两次的话﹐我的办法是把它插入另外一个表﹐然后ID从2开始﹐再连接查询

DECLARE @TB1 TABLE(ID INT IDENTITY(1,1),NUM INT)
DECLARE @TB2 TABLE(ID INT IDENTITY(2,1),NUM INT)

INSERT INTO @TB1 VALUES(111)
INSERT INTO @TB1 VALUES(111)
INSERT INTO @TB1 VALUES(222)
INSERT INTO @TB1 VALUES(222)
INSERT INTO @TB1 VALUES(333)
INSERT INTO @TB1 VALUES(111)
INSERT INTO @TB1 VALUES(111)
INSERT INTO @TB2 SELECT NUM FROM @TB1

SELECT A.ID,A.NUM FROM @TB1 A LEFT JOIN @TB2  B ON  A.ID=B.ID AND A.NUM=B.NUM WHERE B.ID IS NULL

效果图

追问

不只是连续两次 有可能是很多次

追答

这个语句可以兼容连续多次的﹐你试一下, 我测试是可以的

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-26
CREATE TABLE #test123 (
  id  int,
  num  int,
  num2  int
);

INSERT INTO #test123 VALUES(1, 111, 100);
INSERT INTO #test123 VALUES(2, 111, 101);
INSERT INTO #test123 VALUES(3, 222, 102);
INSERT INTO #test123 VALUES(4, 222, 103);
INSERT INTO #test123 VALUES(5, 333, 104);
INSERT INTO #test123 VALUES(6, 111, 105);
INSERT INTO #test123 VALUES(7, 111, 106);


-- 假如你只要查询 最小的id 和 num
SELECT
  min(id) as id,
  num
FROM
  #test123
GROUP BY
  num;

id          num
----------- -----------
          1         111
          3         222
          5         333

(3 行受影响)


-- 假如你是要查询 每一个 num, id 最小的那一行. (也就是包含其它列)

SELECT
  *
FROM
  #test123  main
WHERE  
  NOT EXISTS( 
    SELECT 1
    FROM  #test123  sub
    WHERE  main.num = sub.num  AND  main.id > sub.id);

id          num         num2
----------- ----------- -----------
          1         111         100
          3         222         102
          5         333         104

(3 行受影响)

第2个回答  2013-06-26
select min(id),num from tablename group by num追问

不是全部去重 只是去掉相邻的重复的

相似回答