SQL_过滤相邻数据重复项,筛选出。间隔的重复数据

来源:互联网 发布:java.util. 编辑:程序博客网 时间:2024/05/16 23:41

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


原创粉丝点击