去除连续重复的行

在开发一个客户的业务员提成软件时。

该公司的业务员提成率与“职务”相关。


比如:经理提成 10%,主管提成 8%,主任提示 7%

小张,1月份是经理 ,2月份是经理,3月份是 主任,4月份是经理,5月是经理,6月是主任,7月是主任,8月是主任,9月是主任,10月是主任

如果在保存数据时如果每一个月都存入一个数据的话,明显相当于写入了大量的垃圾;

所以,存过数据表中的数据就应该是:

小张,1月经理,3月主任,4月经理,6月主任


也就是说,要删除连接重复的行,仅保留重复的第一行


如表A有以下数据

工号  生效日期          职务

9 2012-05-01 00:00:00副主任
9 2012-06-01 00:00:00副主任
9 2012-07-01 00:00:00高级业务代表
9 2012-08-01 00:00:00副主任
9 2012-09-01 00:00:00副主任
9 2012-10-01 00:00:00副主任
9 2012-11-01 00:00:00暂定资深主任
9 2012-12-01 00:00:00副经理
10 2012-05-01 00:00:00业务助理
10 2012-06-01 00:00:00高级业务代表
10 2012-07-01 00:00:00业务代表
10 2012-08-01 00:00:00高级业务代表
10 2012-09-01 00:00:00副主任
10 2012-10-01 00:00:00副主任
10 2012-11-01 00:00:00高级业务代表
10 2012-12-01 00:00:00高级业务代表


要得到以下结果:

工号  生效日期          职务

9 2012-05-01 00:00:00副主任
9 2012-07-01 00:00:00高级业务代表
9 2012-08-01 00:00:00副主任
9 2012-11-01 00:00:00暂定资深主任
9 2012-12-01 00:00:00副经理
10 2012-05-01 00:00:00业务助理
10 2012-06-01 00:00:00高级业务代表
10 2012-07-01 00:00:00业务代表
10 2012-08-01 00:00:00高级业务代表
10 2012-09-01 00:00:00副主任
10 2012-11-01 00:00:00高级业务代表


要得到这样的结果,巧妙的利用一下 自动编号 的功能就可以非常简的实现,

原理就是让完全两同的两个表,通过 Left join 错位(1行)连接,然后比较错位后的职业,不相同的则留下来即可。

(注意,不要遗忘了错位后右表会出来一行NULL行。这也是我们要的数据)



SELECT 编号=IDENTITY(INT,1,1), * INTO #TEMP FROM  表A ORDER BY 工号,生效日期

SELECT A.工号,A.生效日期,A.职务
	FROM #TEMP A LEFT JOIN #TEMP B ON A.编号 = B.编号 +1
	WHERE ISNULL(B.编号,0)=0 OR A.职务 <> B.职务

是不是很简单???



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值