sql删除重复的数据

wwfxgm 2019-11-14 04:16:47
各位大神:
我使用了如下语句(sql server 2016)
select jdmc,string_agg(jlsj,',') jlsj,string_agg(xy,',') xy from dbo.jdmc2 GROUP BY jdmc;

但是 jlsj 和 xy 有大量重复。
语句运行的结果是:


我需要的结果是:



我提供测试语句和表结构如下:
IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[jdmc2]') AND type IN ('U'))
DROP TABLE [dbo].[jdmc2]
GO

CREATE TABLE [dbo].[jdmc2] (
[jdmc] nvarchar(255) COLLATE Chinese_Simplified_Pinyin_100_CI_AI NULL,
[jlsj] nvarchar(255) COLLATE Chinese_Simplified_Pinyin_100_CI_AI NULL,
[xy] nvarchar(255) COLLATE Chinese_Simplified_Pinyin_100_CI_AI NULL
)
GO




-- ----------------------------
-- Records of jdmc2
-- ----------------------------
INSERT INTO [dbo].[jdmc2] VALUES (N'国家海洋局东海分局湘潭海洋工作站', N'2009', N'科学学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'国家海洋局东海分局湘潭海洋工作站', N'2009', N'科学学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'国家海洋局东海分局湘潭海洋工作站', N'2009', N'科学学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'湖北海视通电子科技有限公司', N'2016', N'机电学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'湖北海视通电子科技有限公司', N'2016', N'机电学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'东港中学', N'2016', N'文理学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'湖州市新风实验小学教育集团', N'2019', N'文理学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'湘潭小学', N'2016', N'文理学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'白泉高中', N'2016', N'文理学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'东港中学', N'2016', N'文理学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'东海中学', N'2016', N'文理学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'湖州市新风实验小学教育集团', N'2019', N'文理学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'湘潭小学', N'2016', N'文理学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'中海油湘潭石化有限公司', N'2013', N'石化学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'中化兴中石油转运有限公司', N'2014', N'石化学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'中石化湖北湘潭石油分公司', N'2008', N'石化学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'中海油湘潭石化有限公司', N'2013', N'石化学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'中海油湘潭石化有限公司', N'2013', N'石化学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'中化兴中石油转运有限公司', N'2014', N'石化学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'中石化湖北湘潭石油分公司', N'2008', N'石化学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'中海油湘潭石化有限公司', N'2013', N'石化学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'华宝证券经济有限责任公司湘潭营业部', N'2009', N'管理学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'湖北海中洲集团有限公司', N'2014', N'管理学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'华宝证券经济有限责任公司湘潭营业部', N'2009', N'管理学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'湖北海中洲集团有限公司', N'2014', N'管理学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'华宝证券经济有限责任公司湘潭营业部', N'2009', N'管理学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'华宝证券经济有限责任公司湘潭营业部', N'2009', N'管理学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'白泉高中', N'2016', N'人文学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'东港中学', N'2016', N'人文学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'东海中学', N'2016', N'人文学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'湘潭小学', N'2016', N'人文学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'白泉高中', N'2016', N'人文学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'东港中学', N'2016', N'人文学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'东海中学', N'2016', N'人文学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'湘潭小学', N'2016', N'人文学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'白泉高中', N'2016', N'外语学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'东港中学', N'2016', N'外语学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'东海中学', N'2016', N'外语学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'湘潭小学', N'2016', N'外语学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'北京学子游学教育科技有限公司', N'2015', N'外语学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'北京学子游学教育科技有限公司', N'2015', N'外语学院')
GO

INSERT INTO [dbo].[jdmc2] VALUES (N'湘潭小学', N'2016', N'人文学院')
GO
...全文
134 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwfxgm 2019-11-14
  • 打赏
  • 举报
回复
引用 1 楼 砸死牛顿的苹果 的回复:
jlsj 只可能一个年份吗? 如果不是 结果怎样?
结果可以这样:
wwfxgm 2019-11-14
  • 打赏
  • 举报
回复
引用 1 楼 砸死牛顿的苹果 的回复:
jlsj 只可能一个年份吗? 如果不是 结果怎样?
jlsj 如果不是一个年份。很简单啊。比如 2016,2017,2018 这样显示。 而不是 2016,2016 这样重复年份显示。
二月十六 2019-11-14
  • 打赏
  • 举报
回复
惭愧啊,我这用的还是2014还没有string_agg这个函数,我用老的方式写一下吧
SELECT jdmc,
STUFF(( SELECT ',' + jlsj
FROM (SELECT DISTINCT jlsj FROM jdmc2 WHERE jdmc = a.jdmc) t
FOR XML PATH('')),
1,
1,
'') AS jlsj,
STUFF(( SELECT ',' + xy
FROM (SELECT DISTINCT xy FROM jdmc2 WHERE jdmc = a.jdmc) t
FOR XML PATH('')),
1,
1,
'') AS xy
FROM dbo.jdmc2 a
GROUP BY jdmc;

  • 打赏
  • 举报
回复
jlsj 只可能一个年份吗?
如果不是 结果怎样?

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧