oracle数据库,多条数据中有一个字段(name)有重复记录,但是其他字段不重复,怎么才能去重查询.

2022-04-13 综合 117阅读
CREATE TABLE #test (
  ID    int,
  name  varchar(10),
  age   int
);
go


-- 用于测试 楼主的原始数据.
INSERT INTO #test
SELECT  1, 'tom',    22    UNION ALL
SELECT  2, 'tom',    23    UNION ALL
SELECT  3, 'tom',    24    UNION ALL
SELECT  4, 'lily',   22    UNION ALL
SELECT  5, 'lily',   23;

-- 用于测试 年龄不是按照大小顺序
INSERT INTO #test
SELECT  101, '张三',    23    UNION ALL
SELECT  102, '张三',    22    UNION ALL
SELECT  103, '张三',    21;

GO


-- 楼主的SQL
select * from #test where ID in(select max(t.ID) from #test t group by t.NAME)
GO

ID          name       age
----------- ---------- -----------
          3 tom                 24
          5 lily                23
        103 张三                  21

(3 行受影响)




-- 方法1:
SELECT
  *
FROM
  #test main
WHERE
  NOT EXISTS( select 1 FROM #test sub where main.name=sub.name AND main.ageGO

ID          name       age
----------- ---------- -----------
          3 tom                 24
          5 lily                23
        101 张三                  23

(3 行受影响)


-- 方法2:
select * from #test 
where  name + '.' + CAST(age as char) IN (SELECT name + '.' + CAST(MAX(age) as char) FROM #test GROUP by name);
GO

ID          name       age
----------- ---------- -----------
          3 tom                 24
          5 lily                23
        101 张三                  23

(3 行受影响)
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com