SQL_过滤相邻数据重复项,筛选出。间隔的重复数据
SQL爬坑系列二。。。。。。。。。
本人新手,入门SQL,对于此问题有更好见解欢迎赐教哈。。。
1.先看数据:
图片展示:
文本展示(可copy进txt,导入excel,再导入数据库生成):
序号,企业,建设主体
1,渝兴印刷厂,供销社
2,莱迅塑胶材料厂,供销社
3,金盏塑料厂,粮管所
4,红林五金电器厂,粮管所
5,永明五金加工厂,粮管所
6,新星塑料五金厂,粮管所
7,德满装潢材料经营部,德满装潢材料经营部
8,飞扬精密五金厂,德满装潢材料经营部
9,朱氏门窗厂,德满装潢材料经营部
10,创意铝合金加工厂,建筑站
11, 德程纸业有限公司,德程纸业有限公司
12,东华幕墙构件五金厂,供销社
13,严水红五金厂,兽医站
14,傅建文防火门厂,德满装潢材料经营部
15,青龙橡塑制品有限公,青龙橡塑制品有限公
2.目的:解决,建设主体为不同地块却重名,导致,通过重名的建设主体无法找到对应的租赁企业,产生的多对多现象。
3.思考:将相邻序号的重复的建设主体过滤,留下不相邻序号也重复的建设主体。
4.前提:序号间隔超过1的即为不同地块单元。
具体步骤:
(1).更新,每个建设主体对应的租赁企业数目Num;
a.新建AB_1表:
SELECT [建设主体],COUNT([序号])as Num
INTO AB_1
FROM [XCIE].[dbo].[AA_CSDN]
GROUP BY [建设主体]
b.给主表AA_CSDN新建Num字段,并更新;
UPDATE [AA_CSDN]
SET [AA_CSDN].Num = AB_1.Num
FROM AB_1,[dbo].[AA_CSDN]
WHERE AB_1.建设主体=[AA_CSDN].建设主体
(2).通过建设主体的最大序号减最小序号(MAX([建设主体])-MIN([建设主体])),获得差值differ;
a.序号为数值型,或新建数值型字段;
b.
SELECT 建设主体,(MAX(序号int)-MIN(序号int))as Differ
INTO AB_2
FROM [AA_CSDN]
GROUP BY 建设主体
c.
UPDATE [AA_CSDN]
SET [AA_CSDN].Differ = AB_2.Differ
FROM AB_2,[dbo].[AA_CSDN]
WHERE AB_2.建设主体=[AA_CSDN].建设主体
(3).通过differ+1是否等于Num获得结果
SELECT *
FROM [AA_CSDN]
WHERE Num!=Differ+1